[PHP] 设计一个可扩展的用户登陆系统

1. 大部分互联网业务中 , 用户登陆功能是非常常见的模块 , 针对登陆功能的数据库设计常见的是下面这样的

User表

id    username   password  ... 其他用户信息

查询时的逻辑类似下面

pass=query("select * from user where username='xxxx'")

if(password==pass){

    //登陆成功

}

这样的结构基本可以满足功能需要 , 但是当需要增加手机登陆 ,邮箱登陆 , 第三方登陆时 ,表结构该怎么设计呢?

可能有人会想到在user表里增加字段 , email  ,  telphone , weixin_id ...

这样的设计导致增加一种登陆方式就要增加字段 , user表的字段过多 , 可扩展性非常差。

 

2. 针对需要第三方登陆的系统 , 最好是按照业务垂直拆分出分表 。把user表中跟认证相关的业务拆分出来 ,变成独立的表 ,这样既能减小user表的容量 ,又能方便的进行扩展字段 , 例如下面的表

local_auth表

id   user_id   username  telphone   email   password

third_oauth表

id   user_id  oauth_id    oauth_type     refresh_token

user表

id    age   sex   birth  ....

上面把本地认证表和第三方oauth认证表与user信息表进行了拆分  ,  这样如果是用手机  ,邮箱 , 用户名 登陆,就去查询local_auth表 ,再去查询user表

如果是第三方认证登陆 , 就根据第三方的oauth_id ,认证查询third_oauth表 ,不同的第三方根据oauth_type进行区分 , 再去查询user表

 

posted @   唯一客服系统开发笔记  阅读(567)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-03-07 [Linux] 取两个文件的并集/交集/差集
2018-03-07 [日常] 编写HTTP接口文档
2016-03-07 [android] sql语句实现数据库的增删改查
2016-03-07 [android] android下创建一个sqlite数据库
点击右上角即可分享
微信分享提示
1
chat with us