我想了解护照js如何专门工作req.user以及如何填充数据

时间:2017-11-30 13:59:13

标签: javascript node.js express passport.js

我是节点js的新手,并尝试过护照进行身份验证,我发现很难理解工作流程。 所以我的问题是它来自哪个req.user? 它是否与护照有关,并且不能更改为req.profile之类的其他内容?

其次在以下html代码中

  <p>
  <strong>id</strong>: <%= user._id %><br>
  <strong>username</strong>: <%= user.local.username %><br>
  <strong>password</strong>: <%= user.local.password %>
  </p>

html填充user对象的位置,我的数据库架构和护照都不包含单词user

这是我的数据库架构

  local:{
    username : String,
    password : String
  }

由于

2 个答案:

答案 0 :(得分:2)

我会告诉你req.user来自哪里而不使用护照。您需要了解的第一件事是快递中的middleware只是一个接收requestresponsenext function的函数。

假设我有一个端点:

POST /auth/login,其中包含usernamepassword

此端点可以返回access token(由您生成并存储在数据库中的随机字符串,如果您不想在数据库中存储,则可以查看JWT)。

好的,现在您在登录成功后拥有该访问令牌。

您可以将其与其他请求一起传递到您的服务器。 让我们说另一个终点:

获取受保护的/auth/profile,只能使用权限access token进行访问。

但保护路线的是什么?这是一个middleware

下面我们定义一个checkAuth中间件。

function checkAuth(req, res, next) {
   // here I can retrieve accessToken from the request header 
   const accessToken = req.get('accessToken')
   // with this accessToken I can query the database and check if this access token is correct or not
   findUserWithTheAccessToken(accessToken)
      .then(user => {
        if (user) {
          // Here's the answer to your question where `req.user` comes from.
          req.user = user
          next() // call next() so it can go to the request handler
        } else {
          throw new Error('Invalid access token.')
        }
      })
}

// then your router would look something like the following
router.get('/auth/profile', checkAuth, handler) // implement your handler ☺️

您可以随时查看快递网站以了解更多信息。

答案 1 :(得分:0)

passport =&GT; Passport是Node.js的身份验证中间件。并且易于实施。

  

登录页面向护照发送用户名和密码。

     

它将检查您配置的数据库。

     

获得成功然后护照会将用户详细信息存储到req会话表单中,您可以使用req

在任意位置检索它