gpt4 book ai didi

node.js - 使用 Passport-facebook-token 在 Nodejs 中处理身份验证,来自前端 Facebook SDK 的请求

转载 作者:太空宇宙 更新时间:2023-11-04 02:07:46 26 4
gpt4 key购买 nike

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

tl;dr [阅读更新]

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

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

有关后端 API 的须知事项。

  1. Passport 用于身份验证
  2. 成功登录通过 API 将电子邮件和 token 返回给客户端。
  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);
});
}
));

Controller 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);
}
);

现在,没有显示错误,但数据没有插入到帐户架构中,我在模型中有这个 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);
}
});
};

最佳答案

您可以使用 facebook-passport 来实现此目的,您可以在此处查看文档:https://github.com/jaredhanson/passport-facebook但基本上,在您已经设置了开发者帐户并从 facebook 开发者网站获取 key 后,您可以实现一个 FacebookStrategy 对象,如下所示,您必须在其中指定您的凭据,以及一个回调,在文档示例中是对 Express 服务器的另一个资源的 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);
});
}
));

关于node.js - 使用 Passport-facebook-token 在 Nodejs 中处理身份验证,来自前端 Facebook SDK 的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43557408/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com