【发布时间】:2017-09-19 07:46:29
【问题描述】:
我正在开发一个 Unity 应用程序。对于登录,有两种方法,一种使用电子邮件,另一种使用 Facebook。如果单独登录,我没有任何问题。使用电子邮件注册和登录完美。使用 Facebook 登录也可以完美运行。这是工作流程,我创建只是为了让您清楚。
tl;dr [阅读更新]
account 有另一个架构,用于登录。
var Account = new Schema({
email: String,
password: String,
facebookId: String
});
有关后端 API 的注意事项。
- 护照用于身份验证
- 登录成功,通过 API 向客户端返回邮件和令牌。
- 在客户端,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