所以我终于设置了我的路线,我的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就可以吗?
答案 0 :(得分:0)
所以看来我的代码实际上正在做的事情。我无法弄清楚为什么它有时会起作用。
解决方案(好吧,问题)是我通过localhost访问该站点。显然,这并不能保证始终使用相同的IP地址。相反,如果我通过http://127.0.0.1访问该网站,它可以很好地工作,并且能够按预期访问用户对象。
对于任何使用类似内容的人,请务必继续使用http://127.0.0.1而不是localhost来保持一致。我认为这也引起了我过去的问题,但我当时并不知道。