【发布时间】:2016-01-18 18:19:32
【问题描述】:
所以我们有一个“网络”服务器和一个 API 服务器——网络服务器提供 HTML,API 服务器提供 JSON。
我们使用 Passport 的 Twitter 策略在 web 服务器上进行身份验证。
我的问题是 - 在 API 服务器上检查通过 Web 服务器进行身份验证的用户是否也通过 API 进行身份验证的最佳方法是什么?
我的假设是我们应该将大部分 Passport 代码放入 Web 服务器,让用户像往常一样使用 Passport 对其进行身份验证,并使用 API 服务器中的一些中间件来检查如果用户已登录(有会话):
app.use(passport.initialize());
app.use(passport.session());
app.use(expressSession({
secret: 'keyboard cat',
store: new MongoStore({mongooseConnection: mongoose.connection})
}));
app.use(function(req,res,next){
if(req.isAuthenticated()){
next();
}
else{
console.log('unauthenticated request');
res.status(403).json({error:'unauthorized request'});
}
});
但是,以上内容似乎还不够。我对我在 API 服务器上需要什么代码完全感到困惑——我相信我需要从 Web 服务器写入的同一个会话存储中读取,并查看对 API 服务器的请求中的令牌并将其与会话存储中的令牌?
我不确定我是否理解 req.isAuthenticated() 函数的作用?看来我现在需要编写自己的 req.isAuthenaticated() 函数,该函数从会话存储中异步读取...
有没有人举例说明如何正确地做到这一点?
【问题讨论】:
标签: node.js session express passport.js