MEAN Stack亚马逊Passport Auth

时间:2017-01-29 08:03:22

标签: angularjs node.js express passport.js mean-stack

我正在尝试在我的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);
});

当我尝试发出身份验证请求时,收到以下错误: enter image description here

我尝试过使用<a href="{{amazonUrl}} target="_blank">Login with Amazon</a>,但也无济于事。登录亚马逊的配置时,我已将http://localhost:9000列入白名单。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您似乎向重定向(302)的端点发出了AJAX请求。端点可能包含登录页面,用户应该能够看到并使用它。

确保遵循oauth规范,并且不要过早发出AJAX请求。该协议要求您首先重定向到其登录页面,然后,只有当您拥有一次性代码时,才会发出AJAX请求以交换访问令牌的代码。