用户帐号登录表设计
当存在密码登录、第三方授权登录等登录方式的时候,系统的用户帐号模型应该如何设计?
1. 首先,这是一种思考方案
用户profile表一张,相当于用户总表
帐号密码登录,作为一种登录方式,搞一张表
OAuth作为一种登录方式,也建一张表;如果还有别的登录方式,也可以创建对应的认证表;
有些网站需要API访问,API可以使用api_key和api_secret来认证,可是怎么把一个API访问关联到一个用户?方法还是增加一种API Auth的表:1
id | user_id | api_key | api_secret
每一种X-Auth表都存储了用户的登录认证信息,并通过user_id关联到Users表。这样一来,不但登录过程简化了,而且一个用户可以使用多种方式登录。只要登录成功,拿到了user_id,最后读取Users表是为了获得用户的Profile
2. 另一种思路:
用户总表,含平台唯一uid;
每一个app,都注册登录过,会有对应的appuserid;
不同app通过一个和总表的关联表关联起来1
2
3
4
5本地用户唯一ID 社交网络类型 社交网络唯一ID
1112 weibo 20
5111 qq 20
6000 weixin 10
6000 qq 300
3. 目前第三方登录通常有两种设计思路
1、将第三方登录看成一种登录方式,使用第三方登录的前提是,你先要有一个账户。
缺点:当用户没有账户,直接使用第三方登录时,你只能提示他先去注册账户。但在用户看来,就是欺骗,容易引起用户的反感。
优点:当用户账户绑定了第三方账号后,用户就在也不用记住密码了,完全可以通过各个熟悉的第三方账号登录系统。
2、将第三方登录,看成一个独立的用户
优点:没有注册流程,容易吸引用户,由于是第三方直接登录,也不需要考虑用户会忘记密码
缺点:一个人容易产生多个账户,用户的行为容易分散到多个账户中,增加了系统的复杂性,某些情况下还会影响用户的产品体验。
通篇看下来,第三方登录并没有想象中的那么美好,第一种方式也就仅仅解决用户忘记密码的问题,注册时还会引起用户反感。第二种方式虽然能起到吸引用户的作用,但却增加了系统的复杂性,某些情况下还会影响用户的产品体验。
所以,大家可以根据自己的实际情况,考虑是否要添加第三方登录的支持,如果要,应该使用哪种第三方登录的模式。
4. user_auths表例子
1 | user_auths |