用户登录系统的设计

小狮子
  • 79

有这么一个需求:
用户登录模块,不支持选择登录方式,只有一个文本输入框,同时支持:QQ号,手机号,电子邮件,昵称,身份证等(假如用户都填写了这5个字段的值)任意一个字段 + 密码组合进行登录, 有没有好的实现方式呢?

回复
阅读 3.7k
9 个回答

跟普通的登陆没什么大的区别
可能就是多增加一步
你前台登陆的时候肯定要选择登陆方式的吧?
那么你的默认登陆方式有至少5个选项 QQ号手机号电子邮件昵称身份证,只能选其一
比如你的用户表有qq phone email nike_name card 这些字段
如果前台登陆方式选择了昵称 就拿nike_name作为用户名进行登陆校验;

如果涉及到第三方登陆,那么就再加一个用户第三方表,存储诸如QQ、微博、微信等第三方登陆相关的信息,根据接口和业务设置相应的表字段;

qq号的话需要接通腾讯接口,其他的话就可以让用户先注册,存入数据库里面,然后比对就行了,这个是我的想法

虽然这个需求有点奇葩,如果要优雅一点解决问题:
1、新建表user_security 中包含 user_id,ideneity 两个字段(虽然不懂为什么没有密码)。
2、新增用户时,user_security 表增加5条记录(QQ号,手机号,电子邮件,昵称,身份证 分别与user_id组合)。
3、鉴权的时候,只需要找到用户输入的登录名进行匹配。
4、对了,记得建立索引。

建议采用一个基本表,多个副表的形式进行构建,就是基本表是user_base,QQ登陆的是user_qq,诸如此类的

会冲突的,万一某人昵称和其他某人QQ号一样怎么办?
这种本身没有唯一性,不太现实。

你这个表的设计,业务上很容易;
重要的是区分各字段的规则,以保证唯一性。最起码不能出现A用户的账号,跟B用户的手机号一致这种类似问题

这种需求我觉得在注册时候限制他密码也唯一吧,他输入账号密码的时候,只拿密码去数据库查询出QQ号、手机号、电子邮件、昵称、身份证这些信息,然后做个比对就好了!

QQ号:5到10位数字
手机号:1开头的11位数字,还可以通过前三位号段限制
电子邮件:必带@的及一个.加后缀结尾的
昵称:限制和其他不同
身份证:肯定是15或18位数字 最后也为可以是x 罗列规则,再进行分析,简单先判断,你一个字段匹配五个,那么昵称就要限制

奇葩需求!!!!!!

宣传栏