从后端到前端发送护照会话信息的最佳方法是什么?
我的应用程序适用于端口3000.前两个获取用于Facebook登录和重定向。下一步是从数据库中获取用户数据(用户ID应存储在req.user
)
routes.js:
app.get('/auth/facebook', passport.authenticate('facebook', { scope : 'email' }));
app.get('/auth/facebook/callback',
passport.authenticate('facebook', {
successRedirect : 'http://localhost:8000/',
failureRedirect : '/fail'
})
);
app.get('/auth/userdata', isLoggedIn, function(req, res) {
Donator.findById(req.user, function(err, fulluser) {
if (err) throw err;
res.json(fulluser);
})
});
function isLoggedIn(req, res, next) {
if (req.isAuthenticated()) {
next();
} else {
res.json(false);
}
};
passport config.js
'facebookAuth' : {
'clientID' : 'secret',
'clientSecret' : 'secret',
'callbackURL' : 'http://localhost:3000/auth/facebook/callback'
},
因此,在我的Angular2应用程序中,我可以转到http://localhost:3000/auth/facebook
,重定向到FB登录页面,如果成功重定向到http://localhost:3000/auth/login/callback
,则会将我带到http://localhost:8000/
。
在我的适用于端口8000的Angular2应用程序
getUser(){
this.http.get('http://localhost:3000/auth/userdata')
.map(res => return res.json())
}
每次调用getUser()
时,都会返回' false'。是否有一种简单而安全的方式来注射"这个会话数据到我不同端口的前端?此外,当我在浏览器中转到http://localhost:3000/auth/userdata
时,我可以看到此配置文件呈现为JSON。
当我在同一个端口设置后端和前端时它工作,Facebook,Twitter,谷歌,本地,一切都很好,getUser
返回完整的用户档案。
我希望它清楚。
答案 0 :(得分:5)
Angular2中的请求存在问题。我已为每个请求添加了凭据:
getUser(){
this.http.get('http://localhost:3000/auth/userdata', {withCredentials: true})
.map(res => return res.json())
}
现在很好。