use*_*247 10 ajax node.js cordova url-redirection passport.js
我正在构建一个在服务器端有nodejs的phonegap应用程序.我想使用passport-facebook策略实现登录,但是他们的回调指定了两个路由,/ successcallback和/ failurecallback.拥有单个页面应用程序,这使得将用户重定向到某某页面非常困惑.
我不想从服务器提供静态文件(index.html,login.html),而是在客户端上提供它们并要求客户端进行ajax调用.到目前为止,我能够将/ auth/facebook调用作为AJAX请求,但我无法在同一请求上收到任何响应,因为登录策略要求重定向用户.我宁愿在成功登录时向用户发送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');
}
Run Code Online (Sandbox Code Playgroud)
小智 0
您可以定义自己的函数来代替重定向来执行,而不是使用护照提供的标准重定向。下面是该代码的示例
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1221 次 |
| 最近记录: |