使用ionic2和express app的facebook-passport身份验证

时间:2017-02-14 07:20:32

标签: node.js express ionic2 facebook-authentication passport-facebook

所以我试图使用express和passportjs将facebook身份验证添加到我的ionic2应用程序中。除了在授权后将用户重定向到ionic2 app的最后部分之外,我几乎完成了它的工作。我的两个应用程序都在不同的端口上工作; ionic2在http://localhost:8100上运行,并为http://localhost:8000

上运行的后端内容表达应用程序

这是我遵循的步骤:

  1. 在developers.facebook.com上创建了应用,并获得了应用ID和密码ID。
  2. 在产品> Facebook>设置下,我添加了callBack网址
  3. enter image description here

    1. 然后在我在localhost:8000上运行的快速应用程序中,我添加了facebook身份验证策略,如https://github.com/jaredhanson/passport-facebook中显示的那样:

      passport.use(new FacebookStrategy({
         clientID: FACEBOOK_APP_ID,
         clientSecret: FACEBOOK_APP_SECRET,
         callbackURL: "http://localhost:8000/auth/facebook/callback"
      },
      function(accessToken, refreshToken, profile, cb) {
          User.findOrCreate({ facebookId: profile.id }, function (err, user) {
            return cb(err, user);
          });
      }
      ));
      
       app.get('/auth/facebook',
       passport.authenticate('facebook'));
      
      app.get('/auth/facebook/callback',
          passport.authenticate('facebook', { failureRedirect: '/login' }),
          function(req, res) {
         // Successful authentication, redirect home.
         res.redirect('/');      //how to redirect back to ionic app instead of /
      });
      

      所以现在每当用户点击ionic2 app上的facebook按钮时,它就会转到facebook身份验证页面,并且一旦成功验证它,就会按预期重定向回localhost:8000 / auth / facebook / callback,但我想重定向回离子应用程序我怎么解决这个问题?需要一些指导来解决这个问题。

1 个答案:

答案 0 :(得分:0)

我不确定这是否是你需要的,但我能够打开一个处理facebook身份验证的新窗口。这在我的提供者下面完成:我的successRedirect看起来像这样:

public loginWithFacebook(callback : (data : any) => any){
    this.callback = callback;
    this.childWindow = this.nativeWindow.open(this.authEndpoint);
    this.closeTimer = setInterval(() => {
      if (this.childWindow.closed){
        clearInterval(this.closeTimer);
        this.childWindow = null;
        this.closeTimer = null;
        var passedJson = this.http.get(this.checkEndpoint).map(res => res.json());
        passedJson.subscribe(data => {
          this.callback(data);
        });
      }
    }, 500);
  }

检查窗口是否关闭。问题是我必须自动关闭它。我只是创建了一个html页面,成功重定向呈现关闭创建的新窗口。这是我的successRedirect

router.get('/api/auth/facebook/success', function (req, res) {
    res.render('after-auth');
});

确保使用您的快速应用,您可以在app.js中设置视图引擎。

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');

您的观看次数/ after-auth.html应如下所示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <script type="text/javascript">
        window.close();
    </script>
</body>
</html>

现在关闭新窗口。我仍然遇到的唯一问题是,当我尝试进行下一次调用时,会话似乎没有保存。 req.user对我来说似乎是undefined