【发布时间】:2021-06-11 07:45:27
【问题描述】:
我有一个使用护照工作的 Nodejs 打字稿身份验证系统。
我的问题是,当我在路由中使用req.user 时,我在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,所以我需要一些帮助来修复它。 谢谢
【问题讨论】:
-
“我不想检查用户是否已定义,因为我不想在每条路线上都这样做,这不是一个好习惯。” 我不会不是说这是不好的做法。例如,如果您在创建这些路由之一时遗漏了身份验证中间件,它会给您一个很好的显式错误。
标签: node.js typescript express passport.js