首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Nodejs中使用护照- Facebook令牌处理身份验证,请求来自前端Facebook SDK

在Nodejs中使用护照- Facebook令牌处理身份验证,请求来自前端Facebook SDK
EN

Stack Overflow用户
提问于 2017-04-22 09:15:29
回答 1查看 1.2K关注 0票数 1

我正在开发一个统一应用程序。对于登录,有两种方法,一种使用电子邮件,另一种使用Facebook。如果单独登录,我没有任何问题。注册和登录与电子邮件完美的工作。在Facebook上登录也非常有效。这是我创建的工作流程,只是为了让你明白。

tl;博士阅读更新

account还有另一个模式,用于登录。

代码语言:javascript
复制
var Account = new Schema({
  email: String,
  password: String,
  facebookId: String
});

有关后端API.的知识

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

正如我说的,我已经涵盖了当客户端注册并使用电子邮件登录时,客户端可以使用该应用程序的部分。但我的困惑是如何处理Facebook的登录。Facebook已经与Unity集成,登录是成功的。

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

通过在SO和Google中的其他问题,我遇到了passport-facebook-token,我也尝试使用这个插件,但是无法给出将SDK中的数据处理到Nodejs中的逻辑和流程。有人能帮我理解一下是怎么做到的吗?

passport-facebook-token 更新1:使用

基于策略的index.js

代码语言:javascript
复制
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

代码语言:javascript
复制
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中,我在Model中有这个findOrCreate()函数。

代码语言:javascript
复制
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);
    }
});
};
EN

回答 1

Stack Overflow用户

发布于 2017-04-27 22:57:10

为此您可以使用facebook护照,您可以在这里检查文档:https://github.com/jaredhanson/passport-facebook,但是基本上,在您已经设置了您的开发人员帐户并从facebook的开发人员站点获得您的密钥之后,您可以实现一个FacebookStrategy对象,比如您必须指定您的凭据,还有一个回调,在文档示例中是对另一个快速服务器资源的http请求,然后您可以将数据保存到mongo。

代码语言:javascript
复制
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);
   });
 }
 ));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43557408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档