将身份验证后的用户对象返回到没有刷新页面的父页面?

时间:2016-01-22 00:33:39

标签: javascript node.js passport.js

所以我终于设置了我的路线,我的Soundcloud身份验证工作得很好。我现在遇到的问题是,我无法弄清楚如何在不刷新的情况下将用户返回到父页面。到目前为止我所做的是创建一个弹出窗口,以便用户可以进行身份​​验证。这会重定向到我指定的Soundcloud回调。然后我将该回调重定向到我已经制作的回调,以便我可以关闭弹出窗口。

如果我在验证后尝试在页面上执行任何操作,它会一直打开Connect With Soundcloud页面,直到我刷新页面。页面刷新后,它返回用户,一切都很好,花花公子。

这里是前端的功能:

var windowObjectReference;
var strWindowFeatures = "width=420,height=230,resizable,scrollbars=yes,status=1";

function allowLike(){
  $('.queueTrack').off('click').on('click', function(){

    console.log('clicked like');
    thisDiv = $(this);
    $.getJSON('/user', function(data){

      var token = data.token;
      songId = thisDiv.data("songid");

      $.ajax({
            url: 'https://api.soundcloud.com/me/favorites/' + songId + '?oauth_token=' + token,
            type: 'PUT',
            success: function(result) {
                console.log('u liked' + songId)
            },
            error: function(){
              windowObjectReference = window.open("/auth/soundcloud", "SC_Connect", strWindowFeatures);
            } 
        });
    }).error(function(){
      console.log('getJSON error');
      windowObjectReference = window.open("/auth/soundcloud", "SC_Connect", strWindowFeatures);
    });
  })
}

在后端我有以下内容:

router.get('/auth/soundcloud/callback', 
  passport.authenticate('soundcloud', { failureRedirect: '/login' }),
  function(req, res) {
    res.redirect('/after-auth.html');
  });

after-auth.html关闭弹出窗口,但我无法弄清楚如何在不刷新的情况下将用户对象返回到父页面。

我已经看过一个使用Angular来做这个的教程,但是如果不使用Angular就可以吗?

1 个答案:

答案 0 :(得分:0)

所以看来我的代码实际上正在做的事情。我无法弄清楚为什么它有时会起作用。

解决方案(好吧,问题)是我通过localhost访问该站点。显然,这并不能保证始终使用相同的IP地址。相反,如果我通过http://127.0.0.1访问该网站,它可以很好地工作,并且能够按预期访问用户对象。

对于任何使用类似内容的人,请务必继续使用http://127.0.0.1而不是localhost来保持一致。我认为这也引起了我过去的问题,但我当时并不知道。