Node.js Koa2實現JWT Token用戶認證

JSON Web Token(JWT)是目前最流行的跨域身份驗證解決方案

前置知識:

1.基於Token的身份驗證
2.koa中文文檔


案例爲了更簡潔易懂,使用postman來代替前端界面請求接口。
下面案例獲取請求的name值來生成token

代碼:

const Koa = require('koa')
const Router = require('koa-router')
const jwt = require('jsonwebtoken')
const jwtKoa = require('koa-jwt')
const util = require('util')
const verify = util.promisify(jwt.verify) 
const secret = 'test'
const app = new Koa()
const router = new Router()
app.use(bodyParser())
const bodyParser = require('koa-bodyparser')
app
    .use(jwtKoa({secret}).unless({
        path: [/^\/user\/login/]
    }))
router
    .post('/users/login', async (ctx, next) => {
        const user = ctx.request.body
        if(user && user.name) {
            let userToken = {
                name: user.name
            }
            const token = jwt.sign(userToken, secret, {expiresIn: '1h'})  //token簽名 有效期
            ctx.body = {
                message: '獲取token成功',
                code: 1,
                token
            }
        } else {
            ctx.body = {
                message: '參數錯誤',
                code: -1
            }
        }
    })
    .get('/users/userinfo', async (ctx) => {
        const token = ctx.header.authorization  
        let payload
        if (token) {
            payload = await verify(token.split(' ')[1], secret) 
            ctx.body = {
                payload
            }
        } else {
            ctx.body = {
                message: 'token error',
                code: -1
            }
        }
    })
app
    .use(router.routes())
    .use(router.allowedMethods())
app.listen(3000, () => {
    console.log('app listening 3000...')
})

一開始直接開始獲取用戶信息:

顯示無權限:顯示無權限
輸入name值進行登錄,點擊postman的send按鈕進行登錄請求:
在這裏插入圖片描述
得到返回的token值
在這裏插入圖片描述
拿到token以後再去請求用戶信息接口(將token值放在get請求的header上作爲標識,請求用戶信息接口):
在這裏插入圖片描述
接口返回給我們該用戶的name值
在這裏插入圖片描述
然後就可以根據name值來查詢用戶信息以及用戶權限,實現權限管理,也消除了http無狀態的缺點,可以用來實現單點登錄。

發佈了27 篇原創文章 · 獲贊 6 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章