我在rails api上构建了一个javascript前端(ember),我正在使用devise进行用户身份验证。
一切正常,但密码恢复让我很难过。我查看了设计中的views/devise/password/edit.html.erb
,其属性似乎是password
,new_password
和password_reset_token
。
我正在通过电子邮件发送密码重置令牌,并从中构建了以下ajax调用:
$.ajax({
url: '/users/password.json',
type: 'PUT',
data: {password: this.get('password'), password_confirmation: this.get('passwordconfirmation'), reset_password_token: this.get('content.reset_token')}
});
我可以看到呼叫被接受了,但是我得到了一个我无法理解的设计错误。我认为这与从标准视图传回的resource
有关,但我认为我已经通过ajax调用中的/user
部分覆盖了它。
我在网上找到的所有内容都是关于登录和更改密码,而不是这一点。
我得到的错误是:
Started PUT "/users/password.json" for 127.0.0.1 at 2013-05-29 09:01:36 +0200
Processing by Devise::PasswordsController#update as JSON
Parameters: {"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "reset_password_token"=>"[FILTERED]"}
Completed 500 Internal Server Error in 1ms
NoMethodError - undefined method `[]' for nil:NilClass:
(gem) devise-2.1.2/lib/devise/models/recoverable.rb:125:in `reset_password_by_token'
(gem) devise-2.1.2/app/controllers/devise/passwords_controller.rb:30:in `update'
感谢您的时间。
答案 0 :(得分:2)
解决方法是将属性包装在资源中(在我的情况下是用户):
$.ajax({
url: '/users/password.json',
type: 'PUT',
data: {'user[password]': this.get('password'), 'user[password_confirmation]': this.get('passwordconfirmation'), 'user[reset_password_token]': this.get('content.reset_token')}
});
答案 1 :(得分:0)
我的方式:
$.ajax({url: '/users/password', type: 'PUT', data: { password: $password, password_confirmation: $password_confirmation, current_password: $current_password }});
如果你没有解决它,你可以试试......