javascript - 由于 CORS 导致 Satellizer 登录错误

标签 javascript angularjs authentication satellizer

我正在尝试实现卫星器的本地注册和登录实例。注册(注册)有效(尽管它在使用 POST 发出请求之前使用 OPTIONS 方法“预检”请求)。

现在,问题是当我尝试登录时,我收到 400,“网络”选项卡告诉我我使用了“选项”。我已经查看了这里几乎所有的问题,他们建议我在服务器端设置权限。

因此,以下内容已添加到服务器端,以授予任何请求权限

Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Headers "Authorization"

但我仍然遇到同样的错误。

这是我的登录 Controller ,位于模态中:

angular.module('auth').controller('LoginCtrl',function($rootScope, 
  $scope, $location, $localStorage, $auth, $modalInstance, 
  $modal){

  $scope.formData = {

   email:'',
   password:'',


  };

  $scope.master = {};

    $scope.update = function(user) {
      $scope.master = angular.copy(user);

    };

    $scope.reset = function(form) {
      if (form) {
        form.$setPristine();
        form.$setUntouched();
      }
      $scope.user = angular.copy($scope.master);
    };

  $scope.reset();

  $scope.ok = function () {
    $modalInstance.close();
  };

  $scope.cancel = function () {
    $modalInstance.dismiss('cancel');
  };


$scope.login = function(){

   $auth.login({
      email: $scope.formData.email,
      password: $scope.formData.password,
      grant_type: 'password'
  }).then(function(res){
      alert('success, WELCOME ' + res.data.user.email + '!')
  }) .catch(function(err){
        alert(err.message)
  });
};


});

这是我的 app.js:

angular.module('app').config(function($stateProvider, $urlRouterProvider,
     $authProvider, 
    $httpProvider, urls) {

    /* Add New States Above */
    $urlRouterProvider.otherwise('/home');

    $authProvider.signupUrl = urls.BASE_API + '/Register';
    $authProvider.loginUrl = urls.BASE + '/Token';

});

谁能帮忙解决这个问题吗?

最佳答案

直接编辑 satllizer.js 的 local.login 和 local.signin 函数就可以解决问题:

 local.login = function(user, redirect) {
      var loginUrl = config.baseUrl ? utils.joinUrl(config.baseUrl, config.loginUrl) : config.loginUrl;
      return $http.post(loginUrl, $.param(user), { headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept':'*/*'}})
        .then(function(response) {
          shared.setToken(response, redirect);
          return response;
        });
};

    local.signup = function(user) {
      var signupUrl = config.baseUrl ? utils.joinUrl(config.baseUrl, config.signupUrl) : config.signupUrl;
return $http.post(signupUrl,  $.param(user), { headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept':'*/*'}})
        .then(function(response) {
          if (config.loginOnSignup) {
            shared.setToken(response);
          } else if (config.signupRedirect) {
            $location.path(config.signupRedirect);
          }
          return response;
        });
    };

基本上将以下内容附加到 $http.post(loginUrl, $.param(user)):

$.param(user), { headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Accept':'*/*'}}

关于javascript - 由于 CORS 导致 Satellizer 登录错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31452994/

相关文章:

javascript - Android Studio 与 TheMovieDB.com API 包装器 : unable to start activity ComponentInfo and lots of other errors

javascript - 在 AngularJS 中将字符串转换为函数

algorithm - 由 Mashery 实现的 API 签名认证是如何工作的?

mysql - 认证 Node JS Sequelize Express

javascript - 使用 Sticky-kit(jQuery 插件)重叠元素,因为导航栏会自动填充窗口

javascript - 关闭和打开 Twitter Bootstrap Modals 很快就会导致问题

angularjs - 我应该在项目结构中的服务器端哪里管理高级算法/服务?

php - 通过两个步骤/两种形式登录(不意味着 2 因素身份验证!)

javascript - 在页面中动态添加javascript文件的方法

angularjs - 如何拦截 AngularJS $http 日志以显示在页面中