Javascript 我想了解passport js如何工作,以及如何填充数据
我是NodeJS新手,尝试使用passport进行身份验证,我发现很难理解工作流程。 所以我的问题是什么实际上是Javascript 我想了解passport js如何工作,以及如何填充数据,javascript,node.js,express,passport.js,Javascript,Node.js,Express,Passport.js,我是NodeJS新手,尝试使用passport进行身份验证,我发现很难理解工作流程。 所以我的问题是什么实际上是req.user它从哪里来的? 它是与passport相关的常量,不能更改为任何其他内容,如req.profile 其次是在下面的html代码中 <p> <strong>id</strong>: <%= user._id %><br> <strong>username</strong>: &
req.user
它从哪里来的?
它是与passport相关的常量,不能更改为任何其他内容,如req.profile
其次是在下面的html代码中
<p>
<strong>id</strong>: <%= user._id %><br>
<strong>username</strong>: <%= user.local.username %><br>
<strong>password</strong>: <%= user.local.password %>
</p>
感谢您,passport是Node.js的身份验证中间件。而且它很容易实现 登录页面向passport发送用户名和密码 它将检查您配置的数据库 获得成功后,passport将用户详细信息存储到
req
会话表单中,您可以使用req
passport
=>passport是Node.js的身份验证中间件。而且它很容易实现
登录页面向passport发送用户名和密码
它将检查您配置的数据库
获得成功后,passport将用户详细信息存储到req
会话表单中,您可以使用req
我将向您展示在不使用passport的情况下,
req.user
来自何处。您首先需要了解的是,express中的中间件
只是一个函数,它接收请求
、响应
和下一个函数
假设我有一个端点:
POST/auth/login
,它使用用户名
和密码
该端点可以返回一个访问令牌(由您生成并存储在数据库中的随机字符串,如果您不想存储在数据库中,可以查看JWT)
好的,现在您在登录成功后拥有了该访问令牌
您可以将其与其他请求一起传递到服务器。
让我们假设另一个端点:
获取受保护的/auth/profile
,只有使用正确的访问令牌才能访问它
但是什么是保护路线呢?它是一个中间件
下面我们定义一个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 ☺️
您可以随时查看express网站了解更多信息。我将向您展示无需使用passport的req.user
的来源。您首先需要了解的是,express中的中间件
只是一个函数,它接收请求
、响应
和下一个函数
假设我有一个端点:
POST/auth/login
,它使用用户名
和密码
该端点可以返回一个访问令牌(由您生成并存储在数据库中的随机字符串,如果您不想存储在数据库中,可以查看JWT)
好的,现在您在登录成功后拥有了该访问令牌
您可以将其与其他请求一起传递到服务器。
让我们假设另一个端点:
获取受保护的/auth/profile
,只有使用正确的访问令牌才能访问它
但是什么是保护路线呢?它是一个中间件
下面我们定义一个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 ☺️
您可以随时查看express网站了解更多信息。req.profile来自您对passport所做的序列化,而您扩展的策略.req.profile来自您对passport所做的序列化以及您扩展的策略。因此,req.user
是passport内部制作的东西,html用户名如何?:
从何处获取用户对象,或者后端如何将其发送到要填充的frondent?如果我正确的话,这将是一个模板引擎,我认为语法是ejs。基本上,您使用res.render('page',{user:{local:{username:'John}}})在视图中填充数据。因此,req.user
是passport内部制作的东西,那么html用户名:
从何处获取用户对象,或者后端如何将其发送到要填充的frondent?这将是一个模板引擎,如果我正确的话,我认为语法是ejs。基本上,您可以使用res.render('page',{user:{local:{username:'John}}})来填充视图上的数据。