原本公司项目是正常的用户名、密码登陆,可是忽然转换成了第三方oAuth2方式登陆,由此开始学习了该种登陆形式。javascript
共有5种受权模式,有受权码模式、简化模式、密码模式、客户端模式,这里只介绍受权码模式,这大概是功能最完整、流程最严密的受权模式,大概也是使用最多的受权模式。java
同普通的用户名、密码登陆不一样,oAuth2登陆方式中,增长了一个受权层。用户想要进行登陆操做时,会被跳转到受权服务器上进行登陆,在受权服务器登陆成功时,会触发一个回调函数从新回到当前用户所在系统,以后执行后续操做。git
这里使用了simple-oauth2
。正常的npm install simple-oauth2
便可,想了解更详细的使用方法,点击此传送门即可了解。github
配置信息:npm
cosnt oauth2 = simpleOauth.create({ "clientId": "<id>", "clientSecret": "<secret>", "tokenPath": "/oauth/access_token", "authorizePath": "/oauth/authorize" })
步骤:服务器
(1)用户点击登陆按钮。服务器事先设定一个配置信息如上所示,后台经过下面的这个函数会获得一个Url,结果相似于/oauth/authorize/redirect_uri=http://localhost:3000/callback&client_id=&clientsecret=&response_type=code
。函数
// /auth路由处理 const authorizationUrl = oauth2.authorizationCode.authorizeURL({ redirect_uri: 'http://localhost:3000/callback" // scope: '' 无关紧要参数 // state: '' 无关紧要参数 能够本身任意填写 })
(2)经过该Url,能够到达三方登陆界面,用户在三方登录成功时,上面的redirect_uri
就会被回调,同时会附带一个code在redirect_uri
上,该code由三方登陆服务器提供,该code与客户端Id和redirect_uri是一一对应的关系,回调的url如/callback/code=
。学习
// /callback路由处理 let code = req.query.code oauth2.authorizationsCode.getToken(code, (err, result) => { if(err) // handle error const token = oauth2.accessToken.create(result) // 这里就是获得的access_token })
(3)重要的token
获得以后,就预示着三方登陆已经登陆成功。接下来就是本身系统的处理了。url
至此,三方登陆已经成功登陆。code
写的可能不尽如人意,我也是学习者,写的目的也是为了让本身对oAuth2登陆加深印象,若是错误,欢迎指正,一块儿进步啊。