我是节点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
}
由于
答案 0 :(得分:2)
我会告诉你req.user
来自哪里而不使用护照。您需要了解的第一件事是快递中的middleware
只是一个接收request
,response
和next function
的函数。
假设我有一个端点:
POST /auth/login
,其中包含username
和password
。
此端点可以返回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