我正在使用带有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生成新的,如果我刷新页面,则注销正在运行。
答案 0 :(得分:1)
我替换了
gem 'ng-rails-csrf' to gem 'angular_rails_csrf'
它开始工作,但我不确定为什么Angular设计建议&#34; ng-rails-csrf&#34; ,没有刷新令牌。只需添加&#39; angular_rails_csrf&#39;做了伎俩。