如何在TwitterStrategy,PassportJS中传递数据?

时间:2016-08-29 14:46:26

标签: express passport.js

我发现这个:How to passing data in TwitterStrategy, PassportJS?这非常有帮助,但我认为它使用旧版护照或快递,或两者兼而有之:

我的下面的代码没有错误,但是passport.authenticate('twitter')似乎没有被调用。我知道我的TwitterStrategy工作,所以我不认为是这样,它认为我可能需要在某处做一个res.send(),以便ajax请求获得成功?任何帮助,将不胜感激!提前谢谢!

var states={};

router.get('/auth/twitter', function(req, res, next){

  var reqId = 'req'+req.sessionID

  states[reqId] = {
    turkeyName : req.query.turkeyName,
    charityName : req.query.charityName,
    votes : req.query.votes
  };

  req.session.state = reqId
  next();

}, function(req, res, next) {
    passport.authenticate('twitter');
});

这就是我在客户端上所做的事情

  var params = {
    turkeyName: $('#turkeyNameInput').val(),
    charityName: 'Stand up to Cancer',
    votes: 1
  };

  var auth = $.ajax({
    type: 'GET',
    url: '/auth/twitter',
    data: params,
    dataType: 'text',
    async: true
  });

  auth.success(function(data){
    console.log('$ajax.auth -- success');
    console.log(data);
  });

  auth.error(function(err){
    console.log('$ajax.auth -- error');
    console.log(err);
  });

1 个答案:

答案 0 :(得分:0)

好的,对于有此问题的其他人也是如此。

在我的noob方式中,我使用ajax从客户端向服务器路由发出get请求...但是在我的服务器进行了相关的护照呼叫后,我遇到了一些Access-Control-Allow-Origin错误。

这是因为Twitter通过ajax阻止来自客户端的请求。 如果您正在获取Access-Control-Allow-Origin或类似的ditch ajax并使用window.location.href

路线:

var states={};

router.get('/auth/twitter', function(req, res, next){  
  var reqId = 'req'+req.sessionID

  states[reqId] = {
    turkeyName : req.query.turkeyName,
    charityName : req.query.charityName,
    votes : req.query.votes
  };

  req.session.state = reqId
  next();

}, passport.authenticate('twitter'),function(req, res) {

});

回调:

router.get("/auth/twitter/callback",
  passport.authenticate('twitter'), function(req, res) {

    var reqId = req.session.state;
    var state = states[reqId]

    findOrCreate(userInfo.userInfoModel, {userInfo : req.user, turkeyName : state.turkeyName, charityName : state.charityName, votes : state.votes}, function(err, userDataRes){
      if(err){
        req.session.destroy();
      }else{
        res.redirect('/list');
      }
    });
});

客户端:

  var url = '/auth/twitter?'

  var dataObj = {
    turkeyName: $('#turkeyNameInput').val(),
    charityName: 'name of charity',
    votes: 1
  };

  window.location.href = url + $.param(dataObj);