授权登录及账户绑定
一键登录
前端应建立/oauth2路由作为Discord回调前端页面的空白验证页面,/login路由作为登录页面。在用户点击Discord授权页取消按钮时返回/login页面,点击授权后跳转/oauth2路由进行授权码验证。后端返回时/oauth2路由会带有jwt query参数,前端将其传入/email/me进行验证即可。如下为样例伪代码:
useEffect(() => {
// 空白页拿到jwt,去后端获取用户信息
let jwt = searchParams.get('jwt');
fetch(`${HOST}/email/me`,{
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${jwt}`
}
}).then(res=>res.json()).then(data=>{
if (data.status_code === 200) {
// 前端可将获取到的用户信息放置在前端的cookie、session、localstorage中进行保存
window.location.href = '/dashboard';
}else{
window.location.href = '/login';
}
})
})
| 运行环境 | 方法 | URI | 解释 |
|---|---|---|---|
| 生产环境 | GET | /discord/loginurl | 获取Button登录的超链接 |
| 开发环境 | GET | /discord/loginurl_dev | 获取Button登录的超链接,回调URI为http://localhost:3000/oauth2 |
账户绑定
本项目提供多个登录渠道,对于从其他渠道登录进来的用户应当引导其绑定Discord方便后续进入用户群,增强用户粘性。
前端应用向Discord发起授权请求,
跳转/oauth2路由,在获取向/discord/bindAPI发起POST请求。
| 运行环境 | 方法 | URI | 解释 | 参数 |
|---|---|---|---|---|
| 生产环境 | GET | /discord/bind_url | 获取绑定Discord账户的URL | |
| 开发环境 | GET | /discord/bind_url_dev | 获取绑定Discord账户的URL,回调URI为http://localhost:3000/oauth2 | |
| 生产环境 | POST | /discord/bind | 绑定Discord账号 | user_id,discord_id |
| 开发环境 | POST | /discord/bind_dev | 绑定Discord账号 | user_id,discord_id |