2009-06-03 5 views
4

Supposons que je construis une application Web dont les pages utilisateur se trouvent à http://example.com/NAME. Quelle est la meilleure façon de s'assurer que le nom d'utilisateur n'est pas en conflit avec un mot réservé (par exemple, 'about', 'contact', etc.)? Je peux penser à deux façons:La meilleure façon de s'assurer que le nom d'utilisateur n'est pas un mot réservé?

  • Maintenir une liste quelque part dans mon code. C'est génial et tout, mais signifie que j'ai un autre morceau de code que je dois éditer si je décide de, disons, changer la page "about" en "aboutus".
  • Demandez l'URI (par exemple) et vérifiez s'il existe (ne renvoie pas un 404). Cela ressemble un peu à un hack, mais d'un autre côté, il fait exactement ce qu'il est censé faire. D'un autre côté, je ne peux rien réserver sans faire une page pour cela.

Quelle serait la meilleure façon de procéder? La validation manuelle des noms d'utilisateur n'est pas une option. Merci!

EDIT: j'oublié de mentionner, le nom d'utilisateur a d'aller à la racine, comme ceci:

http://example.com/USERNAME

Pas comme ça:

http://example.com/users/USERNAME

Par conséquent, pourquoi je pose cette question. C'est pour des raisons techniques, ne demandez pas.

+0

Est-il possible de faire en sorte que l'URL de la page utilisateur soit http://www.example.com/users/NAME? Cela répondrait-il à votre problème? – Sean

+0

Non, je dois l'avoir à la racine pour des raisons techniques. –

Répondre

2

Par souci d'exhaustivité, si vous ne pouvez pas modifier le routage. Une autre possibilité consiste à faire en sorte que vos routes d'utilisateur et vos routes non-utilisateur aient une distinction programmatique. Par exemple, si vous joint une '_' à la fin de chacun de vos itinéraires d'utilisateur, vous pouvez vous assurer que les utilisateurs sont situés à: http://example.com/NAME_ et l'autre voie ne finirait jamais dans '_'

+0

Aha! Bonne idée, c'est exactement ce dont j'ai besoin. C'est un hack, mais je dois m'attendre à cela avec les conditions dans lesquelles je travaille. Merci! –

+11

Il existe une convention existante à partir d'Unix, préfixe ~. – MSalters

+0

@MSalters: Oh oui, j'ai déjà vu ça. Je vais utiliser ça alors. –

1

Vous ne savez que ce soit les mots 'réservés'. Mieux vaut donc maintenir une liste et la valider.

Une autre méthode sera si vous utilisez un CMS, alors tous ces keywods 'about', 'contact' etc. seront là dans votre base de données. Validez contre.

2

Que diriez-vous de changer votre schéma de routage pour que les utilisateurs soient sur example.com/users/NAME?

0

Vous pouvez toujours regarder et voir comment fonctionne stackoverflow.com.

+0

Ce serait "Utiliser un schéma d'URI qui ne correspond pas à celui sur lequel porte la question" – Quentin

+0

Il semble que j'ai répondu avant que la question ne soit entièrement posée. – quamrana

1

Que diriez-vous juste de créer des comptes factices d'abord avec tous les mots de réserve? il suffit de lister tous les possibles et de les créer.

si vous utilisez

www.example.com/user/name 

alors il n'y aura pas de problème, mais il semble que vous souhaitez l'URL courte.

5

Je suggère fortement d'utiliser un chemin unique comme http://example.com/users/NAME à la place. Sinon, qu'allez-vous faire si vous voulez ajouter un mot réservé, mais un utilisateur l'a déjà pris comme nom d'utilisateur? Vous allez vous retrouver avec toutes sortes de problèmes de migration potentiels en cours de route.

Sinon, si vous devez avoir quelque chose qui va directement http://example.com/, pourriez-vous éventuellement préfixer tous les noms d'utilisateur? Alors que l'utilisateur jerryjvl traduirait par lien http://example.com/user_jerryjvl?S'il n'y a vraiment aucune autre solution possible, alors je dirais soit vérifier les noms d'utilisateurs par rapport à la source de données qui détermine ce que sont les 'mots réservés', soit faire un fichier de recherche/table/structure contenant tous les fichiers réservés mots.

1

Juste à côté de la zone de texte quelque chose comme: "Veuillez utiliser votre surnom personnel ou votre vrai nom.Les noms d'utilisateur avec des mots communs indiquant l'affiliation avec l'administration du site peuvent être révoqués".

+1

Ah, oui, ça va sûrement faire réfléchir les utilisateurs "je ne devrais pas utiliser ce nom" s'ils veulent utiliser un "mauvais" nom. Ou non, ce ne sera pas le cas. – OregonGhost

1

Conservez une liste quelque part dans mon code. C'est génial et tout, mais signifie que j'ai un autre morceau de code que je dois éditer si je décide de, disons, changer la page "about" en "aboutus".

Vos menus doivent être stockés dans un tableau/une liste. De cette façon, vous auriez seulement 1 morceau de code à éditer, pas 2. =]

Ensuite, puisque tous les menus sont dans un tableau, vous pouvez faire correspondre le nom d'utilisateur avec les éléments du tableau. par exemple

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

Je conserve les mots réservés dans le code. Voici le code PERL que j'utilise dans le site Web http://postbit.com/ pour vérifier si le usernamename est un mot réservé:

# 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"); 
    } 
} 

La liste complète des noms réservés (comme « NCS », « images », « js », 'admin', 'root', 'vieux', 'test', 'www', 'admin', 'login', 'devel' ...) avec plus de 300 noms d'utilisateur de connexion est posté ici:

Questions connexes