我有一个使用passport工作的Node.js TypeScript身份验证系统。
我的问题是,当我在路由中使用req.user
时,会出现以下错误:Object is possibly 'undefined'
。
这是Typescript的正常行为,但我正在使用一个中间件来保护我想要在其中使用req.user
的路由,并且通过这种方式,req.user
不能是未定义的。
这就是我扩展Express.User
类型的地方:
import { users } from "@prisma/client";
declare global {
namespace Express {
interface User extends users {}
}
}
这是我正在使用的中间件,用于保护已登录用户的路由:
export function checkIsAuthenticated(req: Request, res: Response, next: NextFunction) {
if (req.isAuthenticated()) {
if (!req.user) req.logOut();
else return next();
}
res.status(400).json({
errors: [{ message: "no user logged in" }],
});
}
这是获取用户信息的路由:
export function userRoute(req: Request, res: Response) { // defining the route
res.json({
id: req.user.id, // I'm getting the error in these 4 lines
username: req.user.username, //
email: req.user.email, //
role: req.user.role, //
});
}
router.get("/user", checkIsAuthenticated, userRoute); // using the route
我不想检查用户是否已定义,因为我不想在每个路由中都这样做,而且那不是一个好的实践。这就是为什么有中间件存在的原因。
我不擅长Typescript,所以我需要一些帮助来解决它。