登入及驗證 - hexschool/vue-course-api-wiki GitHub Wiki
驗證
登入
目前 /signin
暫不使用,課程「登入 API 補充說明 (跨域)」會有說明如何運用 /admin/signin
正確登入喔。
[API]: /signin
[方法]: post
[參數]:
{
"username": "[email protected]",
"password": "zzxxccvv"
}
[成功回應]:
{
"success": true,
"message": "登入成功",
"uid": "XX4VbV87lRRBXKhZKT7YX6zhsuO2"
}
[失敗回應]:
{
"success": false,
"message": "登入失敗"
}
跨域登入驗證
JWT 亦可運作
後端設定 token based 的做法 (jwt)
- 先取目前用戶的 token id
- 把 token id 設定 session cookie
- 設定到 request.cookie 裡面
之後用戶呼叫的 api 需要驗證的話,就可以從設定的 request.cookie 的值取出來,用 Node.js 後端做驗證
後端跨域設定
在 apps.js 設定跨域處理
app.all('*', (req, res, next) => {
res.header('Access-Control-Allow-Headers', 'Content-Type,Authorization, Accept,X-Requested-With,x-csrf-token');
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Credentials', true);
// 這裡不能用 * 號, 要改成 domain 的方式才能設置 cookies
res.header('Access-Control-Allow-Origin', req.headers.origin);
if (req.method === 'OPTIONS') {
res.send(200);
} else {
next();
}
});
登入 API 做法
前端 axios 請求附帶 Cookies 設定
前端要把 cookie 的開關打開
axios.defaults.withCredentials = true;
[API]: /admin/signin
[方法]: post
[參數]:
{
"username": "[email protected]",
"password": "zzxxccvv"
}
[成功回應]:
{
"success": true,
"message": "登入成功",
"uid": "XX4VbV87lRRBXKhZKT7YX6zhsuO2",
"token": "xxx"
"expired": "1234567890"
}
[失敗回應]:
{
"success": false,
"message": "登入失敗"
}
驗證方法:
2020/10/5 新增驗證方法,不需開啟 axios.defaults.withCredentials = true;
,直接將 Token 加入 Headers 即可,詳細可參考課程中的做法。
[Headers]:
{
"Authorization": "{token}",
};
登出
[API]: /logout
[方法]: post
[成功回應]:
{
"success": true,
"message": "已登出"
}
檢查用戶是否仍持續登入
[API]: /api/user/check
[方法]: post
[說明]: 檢查用戶是否仍持續登入
[成功回應]:
{
"success": true
}
[失敗回應]: 如用戶已登出狀況
{
"success": false,
"message": "請重新登入"
}