代码如下,一个是登陆接口getAdmin,一个是拿登录用户详细信息的接口getAdminInfo,我在登录接口用了代码req['user']=posts
用把用户的基本信息弄到req也就是Request请求里面,这样我在其中接口可以直接用,但是在typescript确怎么也拿不到值。。这是为什么 ???在getAdminInfo接口用console.log(req['user'])
值为undefined。
import {NextFunction, Request, Response} from "express";
import {getManager} from "typeorm";
import {Admin} from "../entity/Admin";
import jwt from "../util/jwt"
import config from '../config/config.default'
import {md5} from "../util/md5";
export async function getAdminInfo(req:Request,res:Response,next:NextFunction){
console.log(req['user'])
try {
let user={
nickname:null,
avator:null,
roles:["ADMIN"],
perms:null
}
res.status(200).json({
code:0,
data:user,
msg:"登录成功"
})
}catch (err){
next(err)
}
}
export async function getAdmin(req: Request, res: Response, next: Function){
try{
let data=req.body
if(!data.username || !data.password){
res.send("用户名或密码不能为空")
}
const postRepository = getManager().getRepository(Admin);
// load posts
const posts = await postRepository.findOne({username:data.username});
if(!posts){
res.send("该用户不存在")
}
if(md5(data.password)!==posts.password){
res.send("密码输入不正确")
}
posts.token=await jwt.sign(
{id:posts.id},
config.jwtSecret,
{expiresIn:1800}
)
await postRepository.save(posts)
// console.log(token)
// return loaded posts
delete posts.password
req['user']=posts
res.status(200).json({
'code':0,
"data":posts,
"msg":"登录成功"
})
}catch (e) {
next(e)
}
}
你这思路有问题吧,你既然已经用了jwt 了,为什么还要保存用户信息,jwt 就是解决登录状态的。
再说 req 是请求对象,所有的用户多会调用,一个用户登录了,req 下面的post 修改了,下一个用户再登录,不就把上一个用户的 user posts 对象覆盖了吗