2009-06-03 17 views
4

私は、ユーザページがhttp://example.com/NAMEにあるウェブアプリケーションを構築しているとします。ユーザー名が予約語(例:「about」、「contact」など)と競合しないようにするにはどうすればよいでしょうか?私は2つの方法を考えることができます:usernameが予約語でないことを確認する最も良い方法は?

  • 私のコードのどこかにリストを維持してください。これは素晴らしく、すべてですが、「about」ページを「aboutus」に変更することを決めた場合、編集しなければならない別のコードがあります。
  • URI(例:http://example.com/someusername)を要求し、存在するかどうかを確認します(404を返しません)。これは、ハックのようなものだと感じていますが、それはまさにそれがやるべきことをしています。一方、私はページを作ることなく何も予約することはできません。

これについてはどのような方法が最適でしょうか?ユーザー名の手動検証はオプションではありません。ありがとう!

EDIT:

http://example.com/USERNAME

がこれを気に入っていない:私は言及を忘れてしまった、ユーザ名はこのように、ルートに行くためにを持っていますhttp://example.com/users/USERNAME

なぜこの質問をしているのですか?これは技術的な理由によるものですが、質問しないでください。

+0

ユーザーページのURLをhttp://www.example.com/users/NAMEにすることはできますか?それはあなたの問題に対処しますか? – Sean

+0

いいえ、技術的な理由から、私はそれをルートから外してしまわなければなりません。 –

答えて

2

完全性のために、ルーティングを変更できない場合。もう1つの可能性は、ユーザールートと非ユーザールートをプログラム的に区別できるようにすることです。たとえば、各ユーザールートの末尾に'_'を追加した場合、ユーザーはhttp://example.com/NAME_に、もう1つのルートは決して終了しません。'_'

+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/に直接接続する必要がある場合は、すべてのユーザー名の接頭辞を付けることができますか?そのユーザーjerryjvlはリンクhttp://example.com/user_jerryjvlに翻訳されるでしょうか?

本当に他に解決策がない場合は、「予約語」が何であるかをデータソースが判断してユーザー名をチェックするか、予約されたすべてのものを含む参照ファイル/テーブル/構造を作成する言葉。

1

テキストボックスのすぐ隣に「あなたの個人的なニックネームまたは実名を使用してください。サイト管理との提携を示す一般的な単語のユーザー名は取り消される可能性があります。

+1

ああ、確かに、ユーザーが「悪い」名前を使用する場合は、「この名前を使用すべきではありません」と考えさせるでしょう。あるいは、そうではありません。 – OregonGhost

1

私のコードのどこかでリストを維持してください。これは素晴らしく、すべてですが、私が "about"ページを "aboutus"に変更することを決めた場合、私が編集しなければならない別のコードがあることを意味します。

メニューはアレイ/リストに保存する必要があります。こうすることで、編集するコードは1つだけにすることができます。2. =]

すべてのメニューは1つの配列になっているため、ユーザー名と配列の要素を一致させることができます。例えば

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

ため Iは、コード内部予約語を維持します。 これは私が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

関連する問題