OAUTH逻辑

我目前写的,是我理解的感觉靠谱一点的方法
假设后端的登录接口地址在oauth/


第一次登录步骤流程

1、用户点击登录按钮,前端向oauth/sign-up地址发送get请求,此时后端将会用qq的服务器地址和访问参数构造一个访问,访问qq的服务器,设定回调地址为前端的“等待”页面,并将访问得到的页面直接传给前端(注意这里不是传送json数组)

2、前端向用户展示后端发来的授权页面,不同意授权,则停止,在同意授权时,前端获得来自qq服务器的回调,进入“等待页面”,其中在回调地址中会接上authorization_code,从而获得authorization_code。

3、前端通过回调地址中的参数获得authorization_code后,将其发送给后端的oauth/get-token接口,后端通过authrization_code继续访问qq服务器获得access_token和refresh_token并且储存,再通过access_token获得用户的用户名、头像地址、性别和openId,并将这些作为接口的json返回,最后后端服务器设置cookie(永久)储存用户加密过的openId,user_id和获取access_token的时间(便于刷新access_token),并且让session储存user_id,用于检测用户的登录状态,在这个过程中,前端一直保持等待状态。

4、前端通过上一步返回的头像地址获得用户头像,然后退出等待页面,最后根据user_id对应保存用户的头像,性别和用户名这些信息,如果丢失,应该向接口oauth/user-info接口重新申请信息。

5、如果cookie丢失,则无法判断用户身份,需要重新进行授权。

6、后端同样需要储存user_name,user_image_address,user_sex。


关闭浏览器后重新自动登录

关闭浏览器之后,session会自动失效,当下一次访问到来时,只存在cookie,此时后端会根据cookie存储的user_id,获取对应数据库中的openId,将其加密后与cookie中的对比,如果一致则登录成功,设置session为user_id,失败则不登录并且清空该错误的cookie。在成功自动登录时还会检查当前时间和cookie中的刷新时间,如果差距超过三个月,就会通过access_token重新刷新access_token。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,859评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,982评论 25 708
  • (原谅我,我的豌豆大脑只能想到这个级别的了。把authorization_code的前端请求接口取消了,将请求用户...
    满堂风来阅读 1,458评论 3 1
  • 恨秋移,一庭一己,暖暮沉西,曾几独伤忆?醉琉璃,酒酣正浓,掩花笑泣,而今难再续!不忍看,霜风落黄,霞染残红,凤帏深...
    Joy_Winslet阅读 204评论 3 3
  • 1. 写完作业(物理) 2. 语文背诵全书并复习课下注释 3. 小区跑一圈 但是能获得知识有什么不好?马上要期末了。
    完美直线桑阅读 182评论 0 0