我目前正在使用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问题,我对此仍然很陌生。
答案 0 :(得分:1)
使用视图模型属性中的数据注释无法确保记录的唯一性。这些是为了帮助验证和显示目的主要是。
您应该做的是再次检查userName值,同时再次使用User表的Xc
和UserName
字段,并允许/拒绝用户继续执行操作。
要针对email和userName字段检查userName,您可以尝试这样的操作。
Email
但更好的解决方案是使用电子邮件作为应用程序的用户名(db表中只有一列)并对该列(电子邮件)保留唯一约束,以防止意外重复输入,即使您的代码未能阻止重复入口插入。
您应始终在代码中进行验证,并使db(约束)更安全。