我正在构建一个phonegap应用程序,它将在服务器端使用nodejs。我想使用passport-facebook策略实现登录,但他们的回调指定了两个路由,/successcallback和/failurecallback。只有一个页面的应用程序,这使得用户重定向到某某页面非常令人困惑。
我不想从服务器提供静态文件(index.html、login.html),而是将它们放在客户端,并要求客户端进行ajax调用。到目前为止,我能够以AJAX请求的形式发出/auth/facebook调用,但是我不能收到对同一请求的任何响应,因为登录策略需要重定向用户。我宁愿在成功登录时向用户发送一个user_id或名称,或者在登录失败时向他显示登录表单(也在phonegap的www目录中)。但是重定向和CORS错误阻止了我这样做。我有没有办法实现这一点?我已经找了几个星期了,但是没有成功。我真的很感谢你的帮助!
PS:我宁愿避免从节点服务器发送所有的html和静态内容。
编辑:添加登录代码以更好地理解:
app.get('/userpage', utility.isLoggedIn, function(req, res)
{
res.send('User:'+req.user);
});
app.get('/', utility.isLoggedIn, function(req, res)
{
res.redirect('/userpage');
});
app.get('/auth/facebook', passport.authenticate('facebook'));
app.get('/auth/facebook/callback',passport.authenticate('facebook',
{
successRedirect : '/',
failureRedirect : '/login'
}));
app.get('/logout', function(req, res)
{
req.logout();
res.redirect('/login');
});
utility.isLoggedIn:
function isLoggedIn(req, res, next)
{
if (req.isAuthenticated())
return next();
res.redirect('/login');
}发布于 2017-05-10 05:45:22
你不能用facebook oAuth做到这一点,但是Facebook提供了another login solution,你可以在这里编写你的客户端应用程序来请求令牌,然后你可以在服务器上用passport-facebook-token验证令牌。
这样,您就可以将passport的优势用于持久会话,而无需进行恼人的重定向。
发布于 2016-12-12 16:30:03
除了使用passport提供的标准重定向,您可以定义自己的函数,该函数将被执行,而不是重定向。下面是代码示例
passport.authenticate('login', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.json({ status:"failed", "error": "Invalid credentials" }); }
// req / res held in closure
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.json({ "status":"success"});
})
})(req, res, next);https://stackoverflow.com/questions/24595817
复制相似问题