我打算让用户使用他们的电子邮件或用户名登录,但我想知道如何在MySQL中正确地执行此操作。
我目前正在验证用户名和电子邮件字段(PHP),以确保它们不在数据库中。这些查询发生在将添加用户的实际插入查询之前。我想添加一个唯一索引就足以让一个系统以单一身份登录 - 但在这种情况下,两个字段需要唯一性呢?是否足够为每列添加唯一索引?
此外,这种方法可能遇到任何问题吗?
提前致谢。
答案 0 :(得分:2)
我不会依赖索引 - 最好先在数据库中搜索这两个值中的每一个。一个独特的索引值得添加,但从来没有很好地依赖于捕获这些事件。
在我对登录执行相同操作的网站上,如果用户名具有@符号,我认为它是一封电子邮件,并查找相应的用户名(我需要的用户名,因为密码是用该系统中的用户名作为salt进行哈希)
答案 1 :(得分:0)
我在我的网站上这样做,但我保持相对简单。我不允许在用户名中使用@符号。在我的函数中的users表上触发登录查询之前,我使用php来确定用户名字段中是否有@。如果是这样,我调整查询(使用fieldname的变量)来检查用户表中电子邮件字段的用户名。
有可能直接在MySql中实现它,但对我来说这个解决方案快速,易于编程,并且可以100%的时间工作。
答案 2 :(得分:0)
我强烈建议只能使用电子邮件地址登录 - 他们不想记住另一个用户名,而且您不想处理检查是否正在查看用户名或电子邮件每次要验证它时的地址。但是那说,这不是什么大问题,只是你可以做的事情。如果您觉得这对您的用户来说是一个很好的功能,那么请继续。
不要依赖唯一索引来抓住你的副本,这不是一个干净的方法。如果值已经存在,请务必在插入之前进行检查。
想到的另一个提示是 - 如果有任何错误,您必须刷新表单,请确保填充所有用户填写的字段。