MEAN + Passportjs(Facebook) - 如何处理带有角度的护照回调,而无需服务器重定向

时间:2016-08-08 03:18:39

标签: angularjs node.js rest passport.js passport-facebook

我正在使用MEAN Stack + Passport(适用于Facebook)构建示例身份验证应用程序。我希望服务器不能为特定类型的客户端编码(在这种情况下为角度)。我希望护照模块返回状态和数据,让客户决定每种情况下要做什么?

// facebook -------------------------------

  // send to facebook to do the authentication
  app.get('/auth/facebook',
    passport.authenticate('facebook', { scope : 'email' })
  );

  // handle callback
  app.get('/auth/facebook/callback', function(req, res) {

    passport.authenticate('facebook', function(err, user, info) {

      if (err) { return res.json(err) }
      else if (user.error) { return res.json({ error: user.error }) }
      else { return res.json({ redirect: '/profile', user: user }) }

    })(req, res);

  });

我不知道如何处理angular中的回调,因为此路由上没有成功处理程序,因为facebook调用该端点而不是角度。

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您使用stateChangeStart

,则可以使用ui-router

假设用户将使用Facebook登录的页面被称为/ singin,并且状态为singin,您可以触发此事件并处理下一个状态:

$rootScope.$on('$stateChangeStart', (event, next, params, fromState) => {
                    Auth.promise.then(() => {
                        // Look for a redirection state and default to homepage
                        if ($rootScope.isLoggedIn && fromState === "singin") return $state.go("whatever")
                    })
                })

也可以在此条件为真时阻止任何默认重定向,您可以使用:

event.preventDefault()

所以你的代码看起来像这样:

$rootScope.$on('$stateChangeStart', (event, next, params, fromState) => {
            event.preventDefault()
                    Auth.promise.then(() => {
                        // Look for a redirection state and default to homepage
                        if ($rootScope.isLoggedIn && fromState === "singin") return $state.go("whatever")
                    })
                })