0

我为rails api构建了一个javascript前端(ember),并且我正在使用设计进行用户身份验证。

一切正常,但密码恢复让我很难过。我查看了views/devise/password/edit.html.erbin devise 和属性似乎是password,new_passwordpassword_reset_token.

我从通过电子邮件发送的 url 中获取密码重置令牌,并从中构造了以下 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')}
});

我可以看到电话被接受,但我遇到了一个我无法理解的设计错误。我认为这与从标准视图传回的内容有关,但我认为我在 ajax 调用中resource涵盖了这一点。/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'

谢谢你的时间。

4

2 回答 2

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')}
});
于 2013-05-29T19:00:18.647 回答
0

我的方式:

$.ajax({url: '/users/password', type: 'PUT', data: { password: $password,  password_confirmation: $password_confirmation, current_password: $current_password }});

没解决的可以试试......

于 2015-10-12T06:23:38.673 回答