Skip to main content

认证

请求认证可以通过以下2种方式实现

使用自定义Decorator处理

import { Controller, createClassAndMethodDecorator, Get, Put } from '@summer-js/summer'
import jwt from 'jsonwebtoken'

export const RequireLogin = createClassAndMethodDecorator(async (ctx, invokeMethod?) => {
const token = ctx.request.headers['authentication']
try {
jwt.verify(token, 'xxxxxxxx')
return await invokeMethod(ctx.invocation.params)
} catch (e) {
ctx.response.statusCode = 401
ctx.response.body = 'Unauthorized'
}
})

@Controller
@RequireLogin
export class LoginController {
@Get('/me')
info() {}

@Put('/me')
update() {}
}

@Controller
export class LoginController2 {
@Get('/users/:id')
userInfo() {}

@RequireLogin
@Put('/userinfo')
update() {}
}

使用中间件拦截

import { Middleware, Context } from '@summer-js/summer';

@Middleware({ order: 0 })
export class ErrorMiddleware {
async process(ctx: Context, next: any) {
const token = ctx.request.headers['authentication'];
try {
jwt.verify(token, 'xxxxxxxx');
await next();
} catch (e) {}
throw new Error('Not Login');
}
}