首页 > 解决方案 > 仅访问当前用户数据

问题描述

我正在我的一个 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);
}

标签: node.jsexpress

解决方案


我不认为默认快速请求中有一个名为 req.currentUser 的变量名。

您将 GET 请求中的数据存储在 params/header/query 中,并在 req.query/req.params/req.headers 中访问它们。

对于 POST/PUT/DELETE 将数据存储在 body 中,您可以在 req.body 中将它们取出。

可以告诉我你的邮递员 api 发送请求和请求数据吗?


推荐阅读