【问题标题】:Handling authentication in Nodejs with passport-facebook-token, request coming from frontend Facebook SDK使用passport-facebook-token处理Nodejs中的身份验证,来自前端Facebook SDK的请求
【发布时间】:2017-09-19 07:46:29
【问题描述】:

我正在开发一个 Unity 应用程序。对于登录,有两种方法,一种使用电子邮件,另一种使用 Facebook。如果单独登录,我没有任何问题。使用电子邮件注册和登录完美。使用 Facebook 登录也可以完美运行。这是工作流程,我创建只是为了让您清楚。

tl;dr [阅读更新]

account 有另一个架构,用于登录。

var Account = new Schema({
  email: String,
  password: String,
  facebookId: String
});

有关后端 API 的注意事项。

  1. 护照用于身份验证
  2. 登录成功,通过 API 向客户端返回邮件和令牌。
  3. 在客户端,token是最能玩游戏和使用整体功能的。

正如我所说,我已经介绍了如果客户使用电子邮件注册和登录,那么客户可以使用该应用程序的部分。但我的困惑是使用 Facebook 处理登录。 Facebook SDK 已经与 Unity App 集成,登录成功。

现在,我如何使用 Facebook SDK 生成的 Facebook 登录信息到我的后端,以便我可以在整个系统中授权用户,就像在电子邮件登录中所做的那样。

通过 SO 和 Google 中的其他问题,我遇到了passport-facebook-token,我也尝试使用该插件,但无法想出将数据从 SDK 处理到 Nodejs API 的逻辑和流程。有人可以帮我理解它是如何完成的吗?

更新 1:使用passport-facebook-token

index.js 策略

passport.use(new FacebookTokenStrategy({
    clientID: FACEBOOK_APP_ID,
    clientSecret: FACEBOOK_APP_SECRET
  }, function(accessToken, refreshToken, profile, done) {
    Account.findOrCreate({facebookId: profile.id}, function (error, user) {
      return done(error, user);
    });
  }
));

控制器 API

api.post('/auth/facebook/token',
passport.authenticate('facebook-token'),
function (req, res) {
  console.log(req.user);
  // do something with req.user
  res.sendStatus(req.user? 200 : 401);
}
);

现在,没有显示错误,但是数据没有插入到 Account Schema 中,我在 Model 中有这个 findOrCreate() 函数。

Account.statics.findOrCreate = function findOrCreate(profile, cb){
var userObj = new this();
this.findOne({facebookId : profile.id},function(err,result){
    if(!result){
        userObj.facebookId = profile.id;
        //....
        userObj.save(cb);
    }else{
        cb(err,result);
    }
});
};

【问题讨论】:

    标签: node.js facebook unity3d passport.js


    【解决方案1】:

    您可以为此使用 facebook-passport,您可以在此处查看文档:https://github.com/jaredhanson/passport-facebook 但基本上,在您已经设置您的开发者帐户并从 facebook 的开发者网站获取您的密钥之后,您可以实现一个 FacebookStrategy 对象就像在你必须指定你的凭证的地方一样,还有一个回调,在文档示例中是一个对快速服务器的另一个资源的 http 请求,然后你可以将数据保存到 mongo

    passport.use(new FacebookStrategy({
        clientID: FACEBOOK_APP_ID,
        clientSecret: FACEBOOK_APP_SECRET,
        callbackURL: "http://localhost:3000/auth/facebook/callback"
    },
    function(accessToken, refreshToken, profile, cb) {
        User.findOrCreate({ facebookId: profile.id }, function (err, user) {
        return cb(err, user);
       });
     }
     ));
    

    【讨论】:

    • 是的,我已经开始使用passport-facebook-token,但是我想知道应该从 Facebook 到 Mongodb 和 schema 下保存什么。
    • 请查看我的更新,了解我如何使用 passport-facebook-token
    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 2015-03-16
    • 1970-01-01
    • 2013-09-04
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 2018-02-04
    相关资源
    最近更新 更多