我正在编写一个nodejs应用程序,我想将其用作Web应用程序以及API提供者。用户通过身份验证后,我想为该用户分配一个令牌,用于后续请求。这适用于 Web 应用程序的 passport ,因为我只是在会话中使用令牌序列化和反序列化用户。但是,在响应 API 请求时,没有要设置的 cookie 来存储会话信息。理想情况下,护照将在会话和请求正文中查找令牌。有没有办法配置护照来完成此操作?
只需在每个请求上使用访问令牌即可。不需要使用会话。以下是工作流:
POST /signin
/signin
。当客户端从授权服务器收到访问令牌时,它可以向服务器上的受保护资源发出请求。例如:
GET /api/v1/somefunction?token='abcedf'
引用
使用护照.js和.js快递(node.js)制作安全的身份验证 API
正如 bnuhero 提到的,你不需要会话(尽管这种方法也有其优点)。这是我为此开始的一个样板项目:https://github.com/roblevintennis/passport-api-tokens
这是一个替代且易于遵循的 tut(但它确实使用会话)。可能是一个很好的交叉引用:http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local
还有一个相关的参考资料:http://mherman.org/blog/2013/11/11/user-authentication-with-passport-dot-js/
你可以在 nodejs 的护照中使用 isAuthenticated() 方法。在每个路由上,您可以检查if(req.isAuthenticated()),如果它已经通过身份验证,它将允许您访问该路由,或者您可以在else块中重定向或执行任何其他执行。在 Passport 中,您可以返回 done(null,用户)以成功登录,它会将数据存储在 cookie 中,直到会话结束。在用户中,您可以提供有关用户的信息,例如电子邮件,密码。
app.get('/home', (req, res) =>{
if(req.isAuthenticated()){
//render home page
} else {
// go back to the login page or throw soome error
}
})