我正在编写一个nodejs应用程序,希望它既可以作为Web应用程序,又可以作为API提供者。一旦用户经过身份验证,我想为该用户分配一个令牌,以便在后续请求中使用。对于Web应用程序,使用passport很好处理,只需在会话中序列化和反序列化带有令牌的用户即可。然而,在响应API请求时,没有cookie可以设置来存储会话信息。理想情况下,passport应该同时在会话和请求正文中寻找令牌。是否有任何方法可以配置passport来实现这一点?
我正在编写一个nodejs应用程序,希望它既可以作为Web应用程序,又可以作为API提供者。一旦用户经过身份验证,我想为该用户分配一个令牌,以便在后续请求中使用。对于Web应用程序,使用passport很好处理,只需在会话中序列化和反序列化带有令牌的用户即可。然而,在响应API请求时,没有cookie可以设置来存储会话信息。理想情况下,passport应该同时在会话和请求正文中寻找令牌。是否有任何方法可以配置passport来实现这一点?
只需在每个请求中使用访问令牌,不需要使用会话。以下是工作流程:
POST /signin
/signin
。当客户端从授权服务器接收到访问令牌后,就可以在服务器上请求受保护的资源。例如:
GET /api/v1/somefunction?token='abcedf'
参考资料
在Node.js中,您可以使用Passport中的isAuthenticated()方法。在每个路由上,您可以进行检查if(req.isAuthenticated()),如果已经通过身份验证,则允许您访问该路由,或者您可以重定向或执行任何其他操作。在Passport中,您可以返回done(null, user)以进行成功登录,并将数据存储在cookie中,直到会话结束。在用户中,您可以获取有关用户的信息,例如电子邮件、密码等。
app.get('/home', (req, res) =>{
if(req.isAuthenticated()){
//render home page
} else {
// go back to the login page or throw soome error
}
})