登入及驗證 - hexschool/vue-course-api-wiki GitHub Wiki

驗證

  1. 登入
  2. 登出
  3. 檢查用戶是否仍持續登入

登入

目前 /signin 暫不使用,課程「登入 API 補充說明 (跨域)」會有說明如何運用 /admin/signin 正確登入喔。

[API]: /signin
[方法]: post
[參數]:
  {
    "username": "[email protected]",
    "password": "zzxxccvv"
  }
[成功回應]:
  {
    "success": true,
    "message": "登入成功",
    "uid": "XX4VbV87lRRBXKhZKT7YX6zhsuO2"
  }
[失敗回應]:
  {
    "success": false,
    "message": "登入失敗"
  }

跨域登入驗證

JWT 亦可運作

後端設定 token based 的做法 (jwt)

  1. 先取目前用戶的 token id
  2. 把 token id 設定 session cookie
  3. 設定到 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": "請重新登入"
  }