我正在尝试在我的MEAN应用程序中使用Amazon Passport进行身份验证,但我遇到了跨源错误。我的应用程序设置如下:
查看:
<a id="LoginWithAmazon" ng-click="vm.auth()">
<img class="responsive-img amazon-button"/>
</a>
控制器:
vm.auth = function () {
Auth.login()
.then(function () {
$location.path('/');
})
.catch(function (err) {
vm.error = err;
});
}
服务:
vm.login = function () {
var deferred = $q.defer();
$http.post('/auth/amazon')
.then(function (res) {
console.log('SUCCESS! ', res);
deferred.resolve();
})
.catch(function (err) {
console.log('ERR: ', err);
deferred.reject(err.data);
});
return deferred.promise;
};
在我的Express / NodeJS上下文中......
Passport配置如下:
passport.use(new AmazonStrategy({
clientID: config.amazon.clientID,
clientSecret: config.amazon.clientSecret,
callbackURL: "http://localhost:9000/test"
},
function(accessToken, refreshToken, profile, done) {
console.log('SUCCESS AUTH: ', profile);
process.nextTick(function() {
return done(null,profile);
});
});
}
));
快速路线:
router.post('/auth/amazon', function (req, res, next) {
passport.authenticate('amazon', function (err, user, info) {
console.log('Err? ', err);
console.log('User: ', user);
})(req, res, next);
});
我尝试过使用<a href="{{amazonUrl}} target="_blank">Login with Amazon</a>
,但也无济于事。登录亚马逊的配置时,我已将http://localhost:9000
列入白名单。任何帮助将不胜感激。
答案 0 :(得分:0)
您似乎向重定向(302)的端点发出了AJAX请求。端点可能包含登录页面,用户应该能够看到并使用它。
确保遵循oauth规范,并且不要过早发出AJAX请求。该协议要求您首先重定向到其登录页面,然后,只有当您拥有一次性代码时,才会发出AJAX请求以交换访问令牌的代码。