1.验证用户登录一般都是通过前端发送的请求中是否有包含token,如果请求头中包含了token的话就表示已经登录,没有包含token就表示没有登录。所有我吗要获取前端请求header中的token
先生成token吧,便于后面理解解析token获取用户信息
用于生成token,解析之后也是包含这类信息
res:{id,user_name,is_admin}
async login(ctx,next){
// 1.获取用户信息(在token的payload中 记录 id,user_name,is_admin)
const {user_name,password} = ctx.request.body
// 2.操作数据库
try{
const {password,...res} = await getUserInfo({user_name})
// 3.返回结果
ctx.body = {
code:0,
message:'用户登录成功',
result:{
token:jwt.sign(res,JWT_SECRET,{expiresIn:'1d'})
}
}
}catch(err){
}
};
从ctx.request.header中解构出token
const auth = async (ctx, next) => {
const { authorization = ''} = ctx.request.header;
const token = authorization.replace("Bearer ", "");
}
通过jwt解析token 然后将信息存储于ctx.state.user,便于后期获取用户信息
// user中包含了payload的信息(id, user_name, is_admin)---解析token
const user = jwt.verify(token, JWT_SECRET);
// 创建state.user对象用于存储用户信息
ctx.state.user = user;