は、依存koa、koa-router、Baic-auth、jsonwebtoken
"dependencies": {
"basic-auth": "^2.0.1",
"jsonwebtoken": "^8.4.0",
"koa": "^2.7.0",
"koa-router": "^7.4.0"
}
を導入する.
は、token const jwt = require('jsonwebtoken')
const generateToken = function(uid, scope){
const secretKey = "abcdefg";
const expiresIn = 60*60;
const token = jwt.sign({
uid,
scope
},secretKey,{
expiresIn
})
return token
}
を生成する.
token認証 token認証を作成するミドルウェアconst baseAuth = require("basic-auth");
const jwt = require("jsonwebtoken");
class Authenticate {
constructor() {
}
get auth() {
return async (ctx, next) => {
const userToken = baseAuth(ctx.req);
if(!userToken || !userToken.name) {
throw new global.errors.Forbidden("token ");
}
let decode;
try {
const secretKey = "abcdefg";
decode = jwt.verify(userToken.name, secretKey);
} catch(error) {
if(error.name === "TokenExpiredError") {
throw new global.errors.Forbidden("token ");
}
throw new global.errors.Forbidden("token ");
}
ctx.auth = {
uid: decode.uid,
scope: decode.scope
}
await next();
}
}
}
module.exports = {
Authenticate
};
tokenを使用して中間部品const Router = require("koa-router");
const {
Authenticate} = require("../../../middlewares/authenticate");
const router = new Router({
prefix: "/v1/classic"
})
router.get("/laster", new Authenticate().auth( ), (ctx, next) => {
ctx.body = ctx.auth;
}( ))
を認証した場合、最初の中間部品(new Authenticate().auth)でtokenが認証されていないため、異常が発生した場合、次の中間部品には入らない().
アクセス:url GET http:localhost:8082/v 1/classic/lasterはPostManに要求を送信し、要求方式はGET、AuthenrizationのTypeはBase Authを選択し、パラメータUsernameは上に生成されたtokenを記入し、Passwordはを埋めないで空振りします.