小编mja*_*dip的帖子

如何在角客户端处理passport-facebook回调?

我正在开发一个MEAN应用程序.我使用护照进行身份验证 - 本地,脸书和谷歌策略.

我正在使用angularjs客户端.所有路由都在客户端处理.我只使用服务器数据apis.

当使用passport-facebook策略时,我根据护照文档在节点服务器上使用下面的代码.

    app.get('/auth/facebook',passport.authenticate('facebook-auth', { scope : ['email'] }));
    app.get('/auth/facebook/callback',passport.authenticate('facebook-auth', {
        successRedirect : '/home',
        failureRedirect : '/login',
        scope:['email']
    }));
Run Code Online (Sandbox Code Playgroud)

我面临的问题是当用户点击"使用Facebook登录"按钮时

<a href="/auth/facebook" class="btn"><i class="fa fa-facebook"></i> Sign in using Facebook</a>
Run Code Online (Sandbox Code Playgroud)

客户端将访问"/ auth/facebook"路由,该路由最终会将用户重定向到Facebook页面以验证用户的凭据.

成功验证后,用户将被重定向到"successRedirect"值中定义的路由"/ home".

现在问题是,我想使用自定义回调函数,而不是为成功或失败定义重定向.它将如下所示:

app.get('/auth/facebook/callback',passport.authenticate('facebook-auth', function(err,user,info){
   if(err){
            throw err;
        }
        else if(user === 'userexists'){
            res.json({
                'state':false,
                'message':'User with this e-mail already exists'
            });
        }
        else{
            req.logIn(user,function(loginErr){
                if(loginErr){
                    throw loginErr;
                }
                res.json({
                    'state':true,
                    'message':'You logged in successfully!'
                });
            });
        }
 }));
Run Code Online (Sandbox Code Playgroud)

我面临的根本问题是,我不能使用上面的自定义回调,因为客户端没有调用"auth/facebook/callback"路由,它是由facebook调用的.所以,没有成功的处理程序等着赶上客户端回调的响应!

我希望通过某种方式在客户端以json格式获取响应,以消除服务器端重定向,并在facebook成功验证后将消息和用户名传递给客户端.

我即将放弃护照.在删除大量代码之前,希望有任何可能的解决方案!

谢谢

node.js angularjs passport-facebook passport.js

8
推荐指数
1
解决办法
3521
查看次数