Angular 路由中的 Rails CSRF 令牌问题
Posted
技术标签:
【中文标题】Angular 路由中的 Rails CSRF 令牌问题【英文标题】:Rails CSRF token issue in Angular routes 【发布时间】:2014-10-08 00:56:16 【问题描述】:我正在使用带有导轨的 AngularJS 路由。对于身份验证,我正在使用 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() 函数并且登录成功的登录按钮时,如果我单击注销按钮,则使用角度路由 ($location.path) 呈现 logout.html 页面.html ,它会引发以下错误。
ActionController::InvalidAuthenticityToken
因为 authtoken 已被登录操作使用并且不再有效。我不确定如何使用 IN angularJS 生成新的,如果我刷新页面,则注销正在工作。
【问题讨论】:
这个链接会帮助你***.com/questions/14734243/… @Nitin Verma :由于 gem 过时,现在它开始工作了。感谢您的网址。 感谢您发布新的宝石。将来会有所帮助。虽然这个宝石也在链接中的一些答案中列出。 @NitinVerma:是的,我只是从那里拿的。再次感谢您的链接。 【参考方案1】:我换了
gem 'ng-rails-csrf' to gem 'angular_rails_csrf'
它开始工作了,但我不确定为什么 Angular 设计建议 "ng-rails-csrf" ,它不会刷新令牌。只需添加 'angular_rails_csrf' 就可以了。
【讨论】:
以上是关于Angular 路由中的 Rails CSRF 令牌问题的主要内容,如果未能解决你的问题,请参考以下文章
Angular + Rails:POST 请求 422/CSRF 错误
当没有定义 CSRF 时,Angular $resource 查询在 PUT 上获得 401,在定义 CSRF 时在 GET 上获得 404:/
Rails CSRF 保护与单页应用程序(反应,角度,余烬)