node.js - 检查当前用户是否登录
问题描述
我的 Angular 应用程序中有一个配置文件部分,现在我有 5 个用户。
我有一条用户必须更改密码的路线。我想验证用户是否正确登录并已通过身份验证,并且他们无法更改任何其他用户的密码。
router.get('/change-password/:username', (req, res) => {
User.findOne({
username: req.params.username
}).then(user => {
if (user) {
res.status(200).json(user);
} else if (!user) {
res.status(404).json({
message: 'user not found'
});
}
});
});
如果用户 A 已登录并将参数更改为 B 然后更改密码怎么办?有什么办法我不传递参数并获取登录的当前用户
解决方案
基本上是这样的,当您从后端登录用户时,您会向前端发送带有令牌的响应。您将此令牌保存到本地存储中,以便在对后端的每个请求中都有它。他们,您使用中间件功能来检查令牌是否像承载一样在请求的标头中提供。所以答案是:您不必检查每个请求的身份验证,您只需检查令牌是否由中间件提供以及是否正确。如果您使用的是 express,大多数应用程序在 auth 服务类中使用中间件,如下所示:
module.exports.isAuthorized = function(req, res, next) {
User.findById(req.session.userId).exec(function (error, user) {
if (error) {
return next(error);
} else {
if (user === null) {
var err = new Error('Not authorized! Go back!');
err.status = 400;
return next(err);
} else {
return next();
}
}
});
}
在 node.js 路由处:
var auth = require('./auth');
// GET route after registering
router.get('/clientPage', auth.isAuthorized, function (req, res, next) {console.log("1114");
res.sendFile(path.join(__dirname + '/../views/clientPage.html'));
});
如您所见,第二个参数表示在发出请求之前,它将执行中间件功能auth.isAuthorized
。
推荐阅读
- html - 我无法在 Angular/html 脚本中打印对象的值
- c# - 如何区分 Cosmos DB 更改源中的插入和更新
- optimization - LLVM IR(中间表示)中的“inttoptr”指令是否无效?
- discord - 如何向服务器的所有成员发送直接消息?
- matrix-multiplication - Matrix 矩阵产品操作 OpenMDAO
- node.js - 如何从 Scival Api 检索作者指标?
- python - 程序立即跳转到我的代码中的 else 子句
- python - 使用python在双引号文件夹中提取rar文件
- sql - 使用 ST_ClosestPoint、ST_StartPoint 和 ST_EndPoint 查找距离线起点和终点最近的对象
- firebase - 从 Firebase 实时数据库中的列表中获取一些(而不是全部)属性