设计角度身份验证

时间:2016-03-08 02:24:26

标签: ruby-on-rails angularjs ruby-on-rails-4 authentication devise

我正在尝试通过角度进行设计验证。在加载localhost时,我看到POST 401错误。这个问题似乎是在一些设计设置中,因为我的X-CSRF-TOKEN 被传递,但我的POST请求不被接受。

我能够成功注册用户,并立即登录该用户(注册也会将用户登录)。然后我就可以退出了。

问题在于:我无法再次登录该用户。

我的角度应用程序位于导轨内部,因此两者未断开连接。

我该怎么办?以下是相关文件:

app.js

var myApp = angular.module('myApp', ['templates','ui.router','ui.bootstrap', 'Devise']); 
myApp.config([
'$httpProvider', function($httpProvider) {
return $httpProvider.defaults.headers.common['X-CSRF-Token'] = $('meta[name=csrf-token]').attr('content');
  }
  ]);

myApp.config(function ($stateProvider, $urlRouterProvider, $locationProvider)      {

/**
 * Routes and States
 */
 $stateProvider
 .state('home', {
  url: '/',
  templateUrl: 'home.html',
  controller: 'HomeCtrl'
})
 .state('login', {
  url: '/login',
  templateUrl: 'login.html',
  controller: 'AuthCtrl',
  onEnter: ['$state', 'Auth', function($state, Auth) {
    Auth.currentUser().then(function (){
      $state.go('home');
    })
  }]
})
 .state('register', {
  url: '/register',
  templateUrl: 'register.html',
  controller: 'AuthCtrl',
  onEnter: ['$state', 'Auth', function($state, Auth) {
    Auth.currentUser().then(function (){
      $state.go('home');
    })
  }]
});

// default fall back route
$urlRouterProvider.otherwise('/');

// enable HTML5 Mode for SEO
//$locationProvider.html5Mode(true);
});

myApp.run(function() {
  return console.log('angular app running');
});

authCtrl.js

angular.module('myApp')
.controller('AuthCtrl', [
'$scope',
'$state',
'Auth',
function($scope, $state, Auth){

    $scope.login = function() {
        Auth.login($scope.user).then(function(){
            $state.go('home');
        });
    };

    $scope.register = function() {
        Auth.register($scope.user).then(function(){
            $state.go('home');
        });
    };
}]);

navCtrl.js

angular.module('myApp')
.controller('NavCtrl', [
'$scope',
'Auth',
function($scope, Auth){

    $scope.signedIn = Auth.isAuthenticated;
    $scope.logout = Auth.logout;

    Auth.currentUser().then(function (user){
        $scope.user = user;
    });

    $scope.$on('devise:new-registration', function (e, user){
        $scope.user = user;
    });

    $scope.$on('devise:login', function (e, user){
        $scope.user = user;
    });

    $scope.$on('devise:logout', function (e, user){
        $scope.user = {};
    });
}]);

applicaton_controller.rb

class ApplicationController < ActionController::Base
protect_from_forgery with: :exception

respond_to :json

def index
end
end

我安装了Devise gem,并在Bowerfile中使用angular,angular-ui,angular-devise

1 个答案:

答案 0 :(得分:0)

看起来好像在改变:例外:null_session有效..为什么会这样?