2009-06-03 4 views
4

사용자 페이지가 http://example.com/NAME 인 웹 응용 프로그램을 만들고 있다고 가정 해 봅시다. 사용자 이름이 예약어 (예 : 'about', 'contact'등)와 충돌하지 않도록하는 가장 좋은 방법은 무엇입니까? 두 가지 방법을 생각해 볼 수 있습니다.사용자 이름이 예약어가 아닌지 확인하는 가장 좋은 방법은 무엇입니까?

  • 내 코드의 어딘가에서 목록을 관리하십시오. 이것은 훌륭하고 모든 것이지만, "about"페이지를 "aboutus"로 변경하기로 결정한 경우 편집해야하는 코드가 있음을 의미합니다.
  • URI (예 : http://example.com/someusername)를 요청하고 URI가 있는지 확인합니다 (404를 반환하지 않음). 이것은 마치 일종의 해킹처럼 느껴지지만 다른 한편으로는 그것이 수행해야 할 일을 정확하게 수행합니다. 반면에 페이지를 만들지 않고는 아무 것도 예약 할 수 없습니다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 사용자 이름의 수동 검증은 옵션이 아닙니다. 감사!

편집 :

:

http://example.com/USERNAME

이 좋아되지 않음 : 내가 얘기를 깜빡 했네요, 사용자 이름 이 같은 루트에 갈있다 http://example.com/users/USERNAME

그래서이 질문을하는 이유는 무엇입니까? 이는 기술적 인 이유이므로 묻지 마십시오.

+0

사용자 페이지 URL을 http://www.example.com/users/NAME으로 설정할 수 있습니까? 문제가 해결 되었습니까? – Sean

+0

아니요, 기술적 인 이유 때문에 뿌리에서 떼어 내야합니다. –

답변

2

라우팅을 변경할 수없는 경우 완전성을 위해. 또 다른 가능성은 사용자 경로와 비 사용자 경로를 프로그래밍 방식으로 구분하는 것입니다. 예를 들어 각 사용자 경로의 끝에 '_'을 추가 한 경우 사용자의 위치는 http://example.com/NAME_이고 다른 경로는 끝이 없음 '_'

+0

아하! 좋은 생각, 그게 내가 원하는거야. 그것은 해킹이지만, 나는 내가 작업하고있는 조건으로 그것을 기대해야합니다. 감사! –

+11

Unix의 기존 접두어 ~ 접두어가 있습니다. – MSalters

+0

@MSalters : 오, 예전에 그걸 보았습니다. 나는 그 때 그것을 사용할 것이다. –

1

'예약 된'단어 만 알면됩니다. 따라서 목록을 더 잘 유지하고 이에 대해 유효성을 검사하십시오.

CMS를 사용하는 경우 다른 방법으로 'about', 'contact'등 모든 키 워드가 데이터베이스에 있습니다. 그것을 확인하십시오.

2

사용자가 example.com/users/NAME에 있도록 라우팅 체계를 변경하는 것은 어떻습니까?

0

항상 stackoverflow.com의 작동 방식을보고 볼 수 있습니다.

+0

"질문에 대한 URI 스키마가 일치하지 않습니다." – Quentin

+0

질문이 완전히 나오기 전에 대답 한 것 같습니다. – quamrana

1

어쨌든 예약어로 더미 계정을 만드시겠습니까? 가능한 모든 것을 나열하고 작성하십시오. 당신이

www.example.com/user/name 

를 사용하는 경우

는 아무 문제가 없을 것입니다하지만 당신은 짧은 URL을하고 싶습니다처럼 보인다.

5

대신 http://example.com/users/NAME과 같은 고유 경로를 사용 하시길 강력히 권장합니다. 그렇지 않으면 예약어를 추가하려고하지만 사용자가 이미 사용자 이름으로 사용하고 있다면 어떻게 할 것입니까? 트랙 아래에서 발생할 수있는 모든 종류의 잠재적 인 마이그레이션 문제로 끝날 것입니다.

http://example.com/을 곧바로 통과해야하는 경우 모든 사용자 이름의 접두어를 붙이시겠습니까? 해당 사용자 jerryjvlhttp://example.com/user_jerryjvl 링크로 번역됩니까?

정말 다른 해결책이 없다면 사용자 이름을 '예약어'가 무엇인지 결정하는 데이터 소스와 비교하여 확인하거나 예약 된 모든 항목이 들어있는 조회 파일/테이블/구조를 만들라고 말하고 싶습니다. 말.

1

텍스트 상자 바로 옆 "귀하의 개인 닉네임 또는 실명을 사용하십시오. 사이트 운영과의 제휴를 나타내는 일반적인 단어가있는 사용자 이름은 취소 될 수 있습니다."

+1

아, 그래, "틀린"이름을 사용하고 싶다면 사용자가 "이 이름을 사용하지 말아야한다"고 생각하게 만들 것입니다. 아니면, 그렇지 않습니다. – OregonGhost

1

내 코드의 어딘가에서 목록을 관리하십시오. 이것은 훌륭하고 모든 것이지만, "about"페이지를 "aboutus"로 변경하기로 결정한 경우 편집해야하는 코드가 있음을 의미합니다.

메뉴는 배열/목록에 저장해야합니다. 이렇게하면 편집 할 수있는 코드가 1 개 밖에 없습니다. =]

그런 다음 모든 메뉴가 하나의 배열에 있으므로 사용자 이름을 배열의 요소와 비교할 수 있습니다. 예 :

$menu = array('About', 'Contact', 'Home') 
if(in_array($username, $menu)) { 
    echo 'invalid username' 
} 
2

코드 내에 예약어를 유지합니다. 이 내가 usernamename이 예약어 수 있는지 확인하는 http://postbit.com/ 웹 사이트에서 사용하는 PERL 코드 :

# Black list of logins and sub-domains reserved keywords 
my @black_list = qw(
    about access account accounts add address adm admin administration 
    adult advertising affiliate affiliates ajax analytics android anon 
    anonymous api app apps archive atom auth authentication 
    ... 
); 

my $username_normalized = lc($username); 
    $username_normalized =~ s/\W//gs; # 'log-in' -> 'login' 

for my $this_username (@black_list) { 
    if ($username_normalized eq $this_username) { 
    die("This username is already taken. Please choose other username.\n"); 
    } 
} 

예약 된 이름의 전체 목록 ('CSS', '이미지', 'JS'와 같은, 300 개 이상의 로그인 사용자 이름이 포함 된 'admin', 'root', 'old', 'test', 'www', 'admin', 'login', 'devel'...) 여기에 게시됩니다 :

http://blog.postbit.com/reserved-username-list.html

관련 문제