我正在创建一个登录系统,其中数据库没有唯一列,电子邮件可以重复。
用户表的数据库结构
1. 'id' => unique, auto_increment, and primary_key
2. 'email' => not null,
3. 'password' => not null,
4. 'subdomain' => not null
仅举个例子=>数据库中的示例记录可能是
1. id = 1
email = me@me.com
password = 12345
subdomain = first
2. id = 2
email = me@me.com
password = 12345
subdomain = second
比如说
- 我有一个域名叫example.com,有子域
- 登录系统接受电子邮件和密码进行身份验证
- 系统通过子域管理用户登录/注册(我的意思是,如果没有子域,用户就无法访问路线登录/注册,即https://example.com/login或https://example.com/register(将得到404未找到错误(。但使用子域路由https://first.example.com/login或https://first.example.com/register两者都是可访问的,并且系统可以工作。在用户注册期间,子域名第一个也将是保存在名为"子域"的用户表列中。在身份验证过程中,系统将检查电子邮件、密码与子域的组合特定用户(
- 现在,如果同一用户尝试注册不同的子域(例如:https://second.example.com/login或https://second.example.com/register(,并且他使用相同的电子邮件id(用户用于第一个子域名https://first.example.com/register(他可以成功注册并可以登录系统。(但每次登录时,身份验证系统检查具有电子邮件和密码组合的子域会话变量将基于在路由中的子域上(
- 如果用户没有注册到任何其他子域,则将无法访问这些子域,除非他注册了
- 但是两个子域(或任何一个子域(都使用同一个用户表
注意:登录系统是使用php7.4,Laravel 7.*框架构建的
我的问题:这种方法将来会引起任何问题吗,从这种类型的登录系统可以期望什么,任何建议也欢迎
提前感谢
因为问题是"多么可靠"。答案是:它可能非常可靠。
您在域+电子邮件中仍然具有唯一性。您将需要返工您的身份验证中间件,并将域作为与身份验证路由(会话、url或其他解决方案(的每次交互的要求,并返工您的认证控制器。
关于结构,由您决定是否应该:
-
跨所有域的唯一用户:
- 在用户和域之间有一个数据透视表,用数据透视表中的密码将用户链接到每个域(如果每个域需要不同的密码(
- 优点:在所有域中只能编辑一个配置文件
- 缺点:管理多对多关系
-
具有相同电子邮件但唯一组合电子邮件+域的多个用户。
- 优点:无
- 缺点:
- 配置文件更新(密码/图像/状态/…(
- 冗余和缺乏完整性
- 用户和其他独立于域的模型之间的关系