【发布时间】:2016-06-29 04:56:28
【问题描述】:
我正在使用 rails api 并使用 devise_token_auth 进行身份验证,当我尝试通过使用 put 请求点击 /auth/password 来更新密码时,它会以错误 401 (即未经授权)响应。我的服务器日志显示了这个
开始 PUT "/auth/password" 处理 DeviseTokenAuth::PasswordsController#update 作为 HTML 参数: {“密码”=>“[过滤]”,“密码确认”=>“[过滤]”} 无法验证 CSRF 令牌的真实性 Completed 401 Unauthorized in
routes.rb
mount_devise_token_auth_for 'User', at: 'auth' ,:controllers => { :omniauth_callbacks => 'omniauth' }
view.html (angularjs)
<div class="container">
<div class="row">
<div class="row">
<div class="col-xs-6 col-xs-offset-3 que">
<img src="./uploads/img/web-logo.png" class="img-responsive" alt="Logo">
</div>
</div>
<div class="col-xs-12 reset-pas">
<form name="update_pass" ng-submit="updatePassword_controller()" role="form" class="lost_reset_password">
<p class="error_msg" ng-show="update_pass.password_confirmation.$error.passwordVerify">
Passwords are not equal!
</p>
<label>New password</label>
<input type="password" name="password" ng-minlength="8" ng-model="updatePasswordForm.password" required="required" class="form-control">
<span>Minimum 8 Charachters</span>
<br>
<label>Re-enter new password</label>
<input type="password" name="password_confirmation" ng-minlength="8" ng-model="updatePasswordForm.password_confirmation" required="required" class="form-control" password-verify="updatePasswordForm.password" >
<button type="submit" class="btn btn-default" id="reset-submit">Save</button>
</form>
</div>
</div>
</div>
controller.js
$scope.updatePassword_controller = function() {
$auth.updatePassword($scope.updatePasswordForm)
.then(function(resp) {
console.log(resp)
$location.path('/')
})
.catch(function(resp) {
console.log(resp)
});
};
更新 注意 我只在密码更新时遇到这个问题
更新
我安装了gem 'angular_rails_csrf' 现在它只提供authorization error 而不是csrf attack error
【问题讨论】:
-
您是如何提出请求的?您的请求中缺少 CSRF (authenticity_token)。
-
@zekus 亲爱的,我该如何添加?
-
这个问题是在这里提出的stackoverflow.com/questions/14734243/… 也检查这个solidfoundationwebdev.com/blog/posts/…。我猜应该可以解决。
-
@zekus 亲爱的,还是一样的问题
标签: ruby-on-rails ruby-on-rails-4 authentication devise