前言
市面上大多系统都接入了qq,微信第三方登录, 使用OAuth2.0实现第三方登录(qq登录),这项技术需要去qq互联申请appid和appkey.本篇第三方由后端去接入,前端配合去实现.
开发环境
- 前端采用vue去配合实现,提前下载好nodejs , vue脚手架
- 一个已经搭建好的OAuth2.0第三方(由后端去搭建) , 并确定好重定向的地址
OAuth2.0的授权流程
官方流程
- 前端根据第三方地址跳转到第三方(地址就是后端搭建好的地址)
- 用户同意授权后,认证服务器将Authorization Code经由用户给到客户端
- 客户端使用Authorization Code + redirect_url 向认证服务器获取Access Token
- 客户端使用令牌(Access Token),去获取对应用户身份的OpenID
- 使用OpenID和Access Token去调用获取用户信息的接口来获取数据
(本次项目流程由于qq和内部账号绑定,客户端直接使用令牌向资源服务器获取用户信息)
前端实现
- 第三方处理: 用户给予客户端授权后换取一个code,然后会跳到一个授权页面(认证服务器),这个授权有客户端id(client_id)、授权模式、授权权限、重定向等拿着信息去认证服务器换取一个访问令牌(token),最后拿着令牌去资源服务器请求资源.
- 前端获取令牌去访问资源服务器获取用户信息
具体实现
所遇问题: 第三方返回的令牌无法立即获取存储,进行跳转
解决方案: 加一个中间页,后端重定向到中间页 , 由中间页进行判断和存储令牌,从而实现页面跳转实现登录
1.创建好中间页,路由文件配置,并打开history模式
// 打开history模式是可以配合第三方(同源) , 而hash模式只能配合与当前url同文档的url
const createRouter = ()