我正在编写一个想同时用作Web应用程序和API提供程序的Node.js应用程序。验证用户身份后,我想为该用户分配一个令牌,以用于后续请求。这对于Web应用程序的通行证非常有用,因为我只是在会话中使用令牌对用户进行序列化和反序列化。但是,在响应API请求时,没有用于设置存储会话信息的cookie。理想情况下,护照将在会话和请求正文中都寻找令牌。有什么方法可以配置护照来完成此任务吗?
Answers:
只需对每个请求使用访问令牌。不需要使用会话。以下是工作流程:
POST /signin
/signin
。当客户端从授权服务器收到访问令牌时,它可以向服务器上的受保护资源发出请求。例如:
GET /api/v1/somefunction?token='abcedf'
参考文献
正如bnuhero所提到的,您不需要会议(尽管这种方法也有其优点)。这是我为此开始的样板项目: https //github.com/roblevintennis/passport-api-tokens
这是一种替代方法,很容易理解(但确实使用了会话)。可能是一个很好的交叉引用: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,user)以成功登录,它将在cookie中存储数据,直到会话结束。在用户中,您可以有关用户的信息,例如电子邮件,密码。
app.get('/home', (req, res) =>{
if(req.isAuthenticated()){
//render home page
} else {
// go back to the login page or throw soome error
}
})