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。

你可能感兴趣的:(OAUTH逻辑)