- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
面试官问我:如何设计 QQ、微信等第三方账号登陆 ?还要我说出数据库表设计! 多账户的统一登录 名称解释 这里的多账户区别于系统级别的,我们讲的多账户系统是指,在我们互联网应用当中,我们的应用会使用多个第三方账号进行登录,比如现在常用的APP:网易、微信、QQ等等。 内容 通过这一篇文章: 可以学到:多用户下面的技术方案细节,以及相应的表设计,流程设计。 不可以学到:与其他文章一样,我这里不会有具体代码实现细节,方案做的对,代码咋写都不会太烂。 架构演进 创业初期 归结为创业初期是因为这个时候用户量比较少,甚至还没有接入上面所说的其他第三方的账户系统,只是自建的体系就可以满足,自建体系的话,目前常用的有 用户名密码注册登陆 这种方式在很多初期网站建设会使用,先注册,再进行登录,在老一点的cms中都能找到这个影子。 流程图: 流程说明: 前端将用户名、密码发送到服务器,服务器进行常规的判断,判断用户名、密码长度是否满足,用户名是否重复等条件,条件不通过直接返回对应错误码给到前端,这里密码字段,为了防止传输过程中被截胡,建议加密再上传,我们的传输密码默认都是会进行一个md5加密,然后记录到数据库再进行一层加密,就算是脱库也没事,密码不要明文存储。 校验通过后,就将用户名密码写入数据库,并进行后面积分发放等操作,这里不展开。 现在进行登录,前端将用户名,密码发送给到服务端,服务端首先会校验登录次数是否超过设置的阈值,如果超过只能继续等待被关小黑屋。 如果未超过继续登录逻辑,判断用户名、密码是否正确,不正确密码则进行阈值的判断,如果超过则关小黑屋,记住小黑屋必须设置过期时间,要不然就会永久关上了,这个可以用redis的过期来做。 登录成功后进行后续的一切后置逻辑,比如加积分。。。等操作。 手机号注册登陆 流程图: 流程说明: 首先输入手机号,然后发送到服务端,服务端将手机号记录在我们数据库中,然后生成随机验证码,并将手机号和验证码绑定到一个redis里面,然后记录过期时间,这个过期时间一般是10分钟左右,这就是我们一般手机验证码的有效期。 手机接收到手机短信后,那么就在界面填写验证码发送服务端,服务端收到验证码后就会在redis里面查询到这个手机号对应的验证码,失败就返回错误码。 成功后就进行登录操作。 这里看起来没有明确的注册登录操作,其实在发送手机号码就可以认为是一个常规的注册,然后后面的验证码输入就是一个登陆操作, 问:?那我要密码咋办? 答:?在后续产品里面增加一个?手机号码密码补录的功能?即可,这也是现在很常规的手法,但是现在移动互联网大爆炸时代,密码已经显得不是那么重要了,反正我从来记不住密码,如果手机号码能操作的app,绝对不用密码来操作。 数据库设计 表结构?: 自增id 用户名 密码 手机号 错误次数 1 user1 7fef6171469e80d32c0559f88b3772450 2 user2 7fef6171469e80d32c0559f88b3772450 说明?: 这里只是单纯说明需要用到的数据,没有扩展具体场景,这个表结构能够满足上面两个方案的设计。 有哪些信誉好的足球投注网站公众号后端架构师后台回复“架构整洁”,获取一份惊喜礼包。 引入第三方账户方案 这里是以QQ-SDK的登录逻辑, 我们先来一波时序图 说明: 客户端自己调起登录的界面,进行输入用户名、密码,这里的是第三方的用户名,密码,登录成功后,会返回access_token openid expire_in,这过程会使用到oauth2.0,不过在sdk里面进行内置回调获取了,后面我们会说明我们自身实现的oauth2.0 客户端拿到access_token、openid、login_type(qq、wechat...)请求应用服务器,应用服务器拿到这些数据后就会根据对应的login_type去对应的用户中心进行access_token和openid进行校验。校验不通过则返回对应错误码 校验通过后就会判断本地是否有这个login_type和openid是否存在,不存在则进行获取远程的用户名、头像等基础信息来作为本地基础数据,并且返回code值 如果已经存在,那就是进行登录操作,返回code值。 客户端拿到code值后进行token值的换取,这个完全遵照oauth2.0的协议来走的,后续每次请求必须带上token,token值在服务端的时间比较久,因为我们想要做的是那种永不下线的操作,所以每次请求我们都将token过期时间进行累加。 数据库设计 根据部分小伙伴的的建议,我这里做一下数据库的整理: 用户基础表(users) 字段 备注 user_id 用户id token 用户登陆的token expire_in toke
您可能关注的文档
- “12306”的架构到底有多牛逼?.docx
- 7 年 Java 后端被淘汰,一路北漂,一路心酸.docx
- 8年开发,一直不知道 Java为什么要加 final 关键字!.docx
- 10w 行级别数据的 Excel 导入优化记录 (2).docx
- 10w 行级别数据的 Excel 导入优化记录.docx
- 12 个顶级 Bug 跟踪工具(建议收藏).docx
- 12 个非常适合做私活或外包项目的开源后台管理系统.docx
- 19张图带你梳理SpringCloud体系中的重要技术点!.docx
- 47K Star 的SpringBoot+MyBatis+docker电商项目,附带超详细的文档!.docx
- 52条SQL语句性能优化策略,建议收藏.docx
文档评论(0)