gpt4 book ai didi

mysql - 如何设计支持用户名/邮箱/手机登录的用户表?

转载 作者:行者123 更新时间:2023-11-29 04:17:53 27 4
gpt4 key购买 nike

我正在为我的网站设计一个用户注册表,我们需要支持使用相同的密码通过用户名/电子邮件/手机登录。

用户可以通过用户名、邮箱或手机进行注册,注册后可以绑定(bind)邮箱或手机。

这是我正在考虑的表格,但它有一些问题:

user_id 是 AUTO_INCREMENT

user_id |   user_name   |   email   |   mobile  |   pwd
--------------------------------------------------------
1 test
2 test@gmail.com
3 123456

以下注册应该失败:

   4        123456              // illegal, 123456 is present in mobile                     
5 test@gmail.com // illegal, test@gmail.com is present in email

要求只是支持username/email/mobile登录,对username的格式没有限制,所以这里的username或email或mobile在三列中必须是唯一的。

好像不能跨多列加唯一约束,有什么更好的办法吗?

最佳答案

保存 user_id 及其密码的表怎么样:

user_account (user_id int, pwd binary(128))

还有一个单独的表来保存用户注册:

user_registration (user_id int, registration nvarchar(300), registration_type int)

然后您将避免拥有属于不同用户的非唯一注册,并且您的各种应用程序可以在对用户进行身份验证时传入它们正在处理的类型或注册。

当 95% 的用户群倾向于专门使用移动登录时(例如),您还可以避免使用包含一堆空值的表。

-- user_acount data

user_id pwd
------- ---------------
1 0x234524305762
2 0x403958634589
3 0x345656753546

-- user_registration data --Types username=1, email=2, mobile=3

user_id registration registration_type
1 'asdf@domain.net' 2
1 '4443332233' 3
2 'userTWO' 1
3 'User-Three' 1
3 'fdsa@domain.net' 2
3 '5554443322' 3

基本上,您是在允许用户为每种不同的注册模式创建一个“用户名别名”,而不是让它们对每种模式都有一个值。这可以被视为用户的良好、灵活的登录选项;糟糕的是,由于凭据的前半部分可能/可能是用户的电话号码,因此入侵帐户会变得更加容易。

关于mysql - 如何设计支持用户名/邮箱/手机登录的用户表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35844906/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com