代码之家  ›  专栏  ›  技术社区  ›  Sasha Chedygov

确保用户名不是保留字的最佳方法是什么?

  •  4
  • Sasha Chedygov  · 技术社区  · 17 年前

    假设我正在构建一个web应用程序,其用户页面可以在 http://example.com/ NAME .确保用户名不与保留字冲突的最佳方法是什么(例如“about”、“contact”等)?我可以想到两种方法:

    • http://example.com/someusername )并检查它是否存在(不返回404)。这感觉有点像一个黑客,但另一方面,它确实做了它应该做的事情。另一方面。如果不为它制作一个页面,我就无法预订任何东西。

    编辑: 我忘了提用户名 深入探究,如下所示:

    http://example.com/USERNAME

    http://example.com/users/USERNAME

    9 回复  |  直到 17 年前
        1
  •  4
  •   jerryjvl    17 年前

    我强烈建议使用一条独特的路径,比如 http://example.com/users/NAME 相反。否则,如果你想添加一个保留字,但用户已经将其作为用户名,你该怎么办?你最终会遇到各种潜在的迁移问题。

    http://example.com/ jerryjvl 将翻译为链接 http://example.com/user_jerryjvl

    如果真的没有其他可能的解决方案,那么我会说,要么根据确定“保留字”是什么的数据源检查用户名,要么在某个地方创建一个包含所有保留字的查找文件/表/结构。

        2
  •  3
  •   Paul Dixon    17 年前

    '_' http://example.com/NAME_ 而另一条路永远不会结束 '_'

        3
  •  2
  •   spender    17 年前

    更改路由方案,让用户位于example.com/users/NAME,怎么样?

        4
  •  2
  •   Rodrigo De Almeida Siqueira    14 年前

    我在代码中保留了保留字。 这是我在 http://postbit.com/

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

    这里发布了拥有300多个登录用户名的完整保留名称列表(如“css”、“images”、“js”、“admin”、“root”、“old”、“test”、“www”、“admin”、“login”、“devel”……):

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

        5
  •  1
  •   NinethSense    17 年前

    你只知道这些“保留”字是什么。因此,最好维护一个列表并对照它进行验证。

        6
  •  1
  •   User    17 年前

    文本框旁边的内容类似于:“请使用您的个人昵称或真实姓名。带有常用词的用户名可能会被撤销,表明您与网站管理部门的关系”。

        7
  •  1
  •   nonopolarity    17 年前

    www.example.com/user/name 
    

    那么就没有问题了,但你似乎希望网址短一些。

        8
  •  1
  •   sqram    17 年前

    您的菜单应该存储在数组/列表中。这样你就只有1段代码要编辑,而不是2段。 =]

    然后,由于所有菜单都在一个数组中,您可以将用户名与数组中的元素相匹配。 例如

    $menu = array('About', 'Contact', 'Home')
    if( in_array($username, $menu) ) {
      echo 'invalid username'
    }
    
        9
  •  0
  •   quamrana Ryuzaki L    17 年前

    你总是可以看看如何 stackoverflow.com 作品。