Rular在Angular路由中的CSRF令牌问题

时间:2014-08-14 11:26:15

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

我正在使用带有rails的AngularJS路由。对于authencation我使用Angular Devise指令。我正面临着CSRF令牌的一些问题。

用户控制器

function userController($scope,$http,$route,$location,Auth,User) {

$scope.login = function(){
  Auth.login($scope.user).then(function(user) {
    User.setCurrentUser(user);
    $location.path("/logout");
  }, function(error) {
    // Authentication failed...
  });
}

$scope.logout = function(){
  Auth.logout().then(function() {
   $location.path("/logout");
  }, function(error) {
    // An error occurred logging out.
  });
}

} 

Angular Routes.js

myApp.config(function($routeProvider, $locationProvider) {
  $locationProvider.html5Mode(true);

  $routeProvider
  .when("/login",
    { templateUrl: "/assets/user/login.html",
      controller: "userController" })
  .when("/logout",
    { templateUrl: "/assets/user/logout.html",
      controller: "userController" })
  .otherwise({ redirectTo: "/login" });
});

模板/ login.html的

<div>
  <label for="user_email">Email</label><br>
  <input autofocus="autofocus" ng-model="user.email" id="user_email" name="user[email]" type="email" value="">
</div>

<div>
  <label for="user_password">Password</label><br>
  <input autocomplete="off" ng-model="user.password" id="user_password" name="user[password]" type="password">
</div>

<div>
  <input name="commit" type="submit" ng-click="login()" value="Sign in">
</div>

模板/ logout.html

<a href="#" ng-click="logout()"> LOGOUT </a>

当我点击使用用户数据调用login()函数并登录成功的登录按钮后,使用angular routes($ location.path)渲染logout.html页面后,如果我点击注销按钮注销.html,它会抛出以下错误。

ActionController::InvalidAuthenticityToken

由于authtoken已被登录操作使用,因此不再有效。我不知道如何使用IN angularJS生成新的,如果我刷新页面,则注销正在运行。

1 个答案:

答案 0 :(得分:1)

我替换了

gem 'ng-rails-csrf'  to gem 'angular_rails_csrf'

它开始工作,但我不确定为什么Angular设计建议&#34; ng-rails-csrf&#34; ,没有刷新令牌。只需添加&#39; angular_rails_csrf&#39;做了伎俩。