OAuth 是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。
申请 OAuth 权限
步骤查看github Creating OAuth App
获取授权码
请求地址
https://github.com/login/oauth/authorize?client_id=xxx&scope=user
授权后会跳转至在github Creating OAuth App
中设置的 redirect_url
,然后后端通后路由获取到前端code参数并 access token:
require('isomorphic-unfetch')
const oauth=async (ctx, next) => {
const { client_id, client_secret,access_token_url} = githubConfig
try {
const tokenResponse = await fetch(`${access_token_url}?client_id=${client_id}&client_secret=${client_secret}&code=${ctx.query.code}`,{
method: 'POST',
headers: {
'Accept': 'application/json'
}
}).then(response => response.json());
// 存储令牌... (一般存储cookies 或者redis中)
//下一步获取用户数据
} catch (error) {
ctx.body='error request';
console.log(error,'error');
}
}
route.get('/oauth',oauth)
if(tokenResponse&&tokenResponse.access_token){
const user=await fetch('https://api.github.com/user',{
headers:{
Authorization:`token ${tokenResponse.access_token}`
}
}).then(response=>response.json())
console.log(user);
ctx.body=JSON.stringify(user);
}