使用angularjs routeprovider的护照facebook认证

时间:2014-08-10 13:07:02

标签: javascript facebook node.js angularjs authentication

我有一个angularjs和node,expressjs应用程序。当我试图实现facebook登录时(passport)。 但问题出在我尝试的时候 -

app.get('/auth/facebook',passport.authenticate('facebook'));
    app.get('/auth/facebook/callback',passport.authenticate('facebook',
        {
            successRedirect: '/profile',
            failureRedirect: '/'
        }));

,配置如下 -

passport.use(new FacebookStrategy({
            clientID: 'xxxx',
            clientSecret: 'xxxx',
            callbackURL:'http://campustop.in/auth/facebook/callback'
        },
        function(accessToken,refreshToken,profile,done){
            console.log(profile);
        }
    ));

所以,问题在于我的客户端,如果我尝试 -

<a href="/auth/facebook">Login with Facebook</a>

然后angularjs $ routeProvider首先捕获此路由并显示空白布局,因为没有使用此URL指定模板或控制器。所以,这个链接永远不会到达我在服务器中的快速路由配置中的路由功能。 但是,当我直接在浏览器中打开此URL时,它会到达服务器,但之后它不会被重定向到任何页面。它只是停留在那里,网络选项卡中显示以下响应 -

Request URL:https://www.facebook.com/dialog/oauth?response_type=code&redirect_uri=http%3A%2F%2Fcampustop.in%2Fauth%2Ffacebook%2Fcallback&client_id=1440645942863962
Status Code:302 forced.302

以及网络标签中的一些响应标头。您可以转到http://campustop.in/auth/facebook

查看它们

1 个答案:

答案 0 :(得分:9)

我通过添加target =&#34; _self&#34;解决了这个问题。像这样的链接标签。

<a href="/auth/google" target="_self">Sign in with Google</a>

当您执行此操作时,角度路由提供程序会忽略它并允许请求命中您的服务器。