确保唯一的用户名/电子邮件

时间:2015-12-30 17:17:42

标签: asp.net-mvc asp.net-identity

我目前正在使用Asp MVC / Identity 2.0来构建会员网站。 我做了一些更改,现在允许用户执行以下操作:

  • 在帐户创建时创建单独的用户名/电子邮件值
  • 使用用户名或电子邮件通过单个文本字段登录

我关注的是用户Alice应该如下注册帐户:

用户名 - Alice

电子邮件 - alice@example.com

用户Bob可以按如下方式创建帐户:

用户名 - alice@example.com

电子邮件 - evilbob@l33th4x0rs.com

我想确保,如果用户创建帐户,其用户名在UserName和EmailAddress列中都是唯一的。

我目前在RegisterViewModel中实现如下

[RegularExpression(@"^([a-zA-Z0-9 \.\&\'\-]+)$", ErrorMessage = "{0} must be alpha numeric")]                 
    [Display(Name = "Username")]
    public string UserName { get; set; }

因此无法在用户名字段中输入电子邮件 - 这是最好的方法吗?

我担心以后的行,我可能想在用户名字段中允许一些特殊字符。

请原谅我,如果这是一个n00b问题,我对此仍然很陌生。

1 个答案:

答案 0 :(得分:1)

使用视图模型属性中的数据注释无法确保记录的唯一性。这些是为了帮助验证和显示目的主要是。

您应该做的是再次检查userName值,同时再次使用User表的XcUserName字段,并允许/拒绝用户继续执行操作。

要针对email和userName字段检查userName,您可以尝试这样的操作。

Email

但更好的解决方案是使用电子邮件作为应用程序的用户名(db表中只有一列)并对该列(电子邮件)保留唯一约束,以防止意外重复输入,即使您的代码未能阻止重复入口插入。

您应始终在代码中进行验证,并使db(约束)更安全。