2013-05-29 56 views
0

我構建了一個JavaScript前端(ember)到api api,並且我正在使用devise進行用戶身份驗證。通過ajax設計密碼可恢復模塊

一切正常,但密碼恢復讓我很難。我看着views/devise/password/edit.html.erb在設計和屬性似乎是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')} 
}); 

我可以看到呼叫被接受,但我發現有一項我無法理解的錯誤。我認爲這與從標準視圖返回的resource有關,但我認爲我在ajax調用中覆蓋了/user部分。

我在網上找到的所有東西都是關於登錄和更改密碼的,這一點什麼都沒有。

我得到的錯誤是:

Started PUT "https://stackoverflow.com/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

你能分享你如何通過JSON獲得重置密碼令牌嗎?我無法做到這一點。 – dwhite

+0

@dwhite我不明白通過JSON。它會在確認鏈接中發送一封電子郵件。一旦用戶點擊鏈接,它會返回到我的網站,那時我擁有令牌。 ajax.request({url:'/api/v1/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')} }) – Rudi

回答

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')} 
}); 
0

我的方式:

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

你可以嘗試,如果你不解決這個問題.. ....