node.js - 仅访问当前用户数据
问题描述
我正在我的一个 Express 应用程序中处理几个 API 端点来做笔记。到目前为止,我已经使用 JWT 构建了身份验证,现在我正在尝试为经过身份验证的用户注释创建 CRUD 端点。我遇到的问题是在当前登录用户之间创建关联,如果他们有权更改该项目。
在我的authentication
控制器中,我尝试在请求中设置一些内容,说明经过身份验证的用户是谁:
exports.signin = function(req, res, next) {
req.currentUser = req.user;
res.send({ token: tokenForUser(req.user) });
}
我在我的用户模型中设置了一个方法来检查对象是否相同:
userSchema.methods.canAccess = function(object) {
return this.equals(object) ||
(object.owner && object.owner == this.id)
}
最后在我创建笔记的路线上,我的目标是能够做类似的事情,if ( req.currentUser.canAccess(req.user) )
但我遇到的问题currentUser
是未定义的。
我觉得我在这里的某个地方犯了一个严重的错误,任何帮助都将不胜感激。
更新(路线)
module.exports = function(app) {
app.get('/', requireAuth, (req, res) => {
res.send({ message: `Welcome back ${res.req.user.email}` })
});
app.post('/signin', requireSignIn, Authentication.signin);
app.post('/signup', Authentication.signup);
app.post('/notes/create', requireSignIn, Notes.create);
}
解决方案
我不认为默认快速请求中有一个名为 req.currentUser 的变量名。
您将 GET 请求中的数据存储在 params/header/query 中,并在 req.query/req.params/req.headers 中访问它们。
对于 POST/PUT/DELETE 将数据存储在 body 中,您可以在 req.body 中将它们取出。
可以告诉我你的邮递员 api 发送请求和请求数据吗?
推荐阅读
- python - 将一个子索引转换为 Pandas 列
- angular - 由于不允许的 MIME 类型(“text/html”)而被阻止:部署在 tomcat 9.0.30 上的 Angular 8 无法提供资产
- c# - 错误 CLassInitialize 签名错误。方法必须是静态的,公开的,不返回值
- java - 如何避免 MVVM 模式中的空响应?
- python-3.x - 无论顺序如何,您如何确保字母组合不再出现?
- azure-active-directory - 是否可以在 GetUsers() 图形 api 调用中过滤掉未迁移到云的本地邮箱
- string - 基于正则表达式连接熊猫中的连续行
- swift - 如何实现返回地址的功能,而不仅仅是获取地址?
- python - 使用 Jinja2 和 for 循环
- python - 按数据计数的直方图