假设我正在构建一个Web应用程序,其用户页面可以在http://example.com/ NAME
找到。确保用户名不与保留字(例如'about','contact'等)冲突的最佳方法是什么?我可以想到两种方式:
最好的方法是什么?手动验证用户名不是一种选择。谢谢!
编辑:我忘了提及,用户名已在根目录下,如下所示:
不喜欢这样:
因此我为什么要问这个问题。这是出于技术原因,不要问。
答案 0 :(得分:5)
我强烈建议您使用http://example.com/users/NAME
等唯一路径。否则,如果要添加保留字,您打算做什么,但用户已将其作为用户名?你最终会遇到各种潜在的迁移问题。
或者,如果您必须直接关闭http://example.com/
,可以为所有用户名添加前缀吗?那么用户jerryjvl
会转换为链接http://example.com/user_jerryjvl
?
如果确实没有其他可能的解决方案,那么我会说要么根据任何数据源检查用户名来确定“保留字”是什么,要么在某处包含所有保留字的查找文件/表/结构
答案 1 :(得分:2)
如何更改路由方案,以便用户访问example.com/users/NAME?
答案 2 :(得分:2)
为了完整性,如果您无法更改路由。另一种可能性是让您的用户路由和非用户路由具有程序性区别。例如,如果您在每条用户路线的末尾添加了'_'
,那么您可以确保用户位于:http://example.com/NAME_,而另一条路径永远不会在{{1}中结束}
答案 3 :(得分:2)
我在代码中维护保留字。 这是我在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','images','js','admin','root','old','test','www','admin','login' ,'devel'...)在这里发布了超过300个登录用户名:
答案 4 :(得分:1)
你只知道这些'保留'字样是什么。因此,最好维护一个列表并对其进行验证。
另一种方法是,如果您使用CMS,那么所有这些关于'','联系'等关键字将在您的数据库中存在。验证它。
答案 5 :(得分:1)
如何首先使用所有保留字创建虚拟帐户?只列出所有可能的并创建它们。
如果您使用
www.example.com/user/name
然后就没有问题,但似乎你希望网址很短。
答案 6 :(得分:1)
文本框旁边的内容如下:“请使用您的个人昵称或您的真实姓名。可能会撤销表示与网站管理关联的常用字词的用户名”。
答案 7 :(得分:1)
在我的代码中的某处保留一个列表。这很好,但是如果我决定将“关于”页面更改为“aboutus”,那么我需要编辑另一段代码。
您的菜单应存储在数组/列表中。这样你只需编辑一段代码,而不是2. =]
然后,由于所有菜单都在一个数组中,因此您可以将username与数组中的元素进行匹配。 例如
$menu = array('About', 'Contact', 'Home')
if( in_array($username, $menu) ) {
echo 'invalid username'
}
答案 8 :(得分:0)
您可以随时查看stackoverflow.com的工作原理。