[英]Devise: change password reset_password_token is empty
我正在使用Devise,並且我試圖創建一個新表單,用戶可以在其中重置密碼,但是出現以下錯誤:
ActiveRecord::RecordNotUnique (PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "index_users_on_reset_password_token"
發生這種情況的原因是因為從生成的reset_password_token
<%= f.hidden_field :reset_password_token %>
是空的。 例如:
<input id="user_reset_password_token" name="user[reset_password_token]" type="hidden">
這是控制器動作
def update_password
@user = current_user
# raise params.inspect
if @user.update_with_password(params[:user])
sign_in(@user, :bypass => true)
redirect_to '/account_settings', :notice => "Your Password has been updated!"
else
redirect_to '/account_settings', :notice => "Your Password was not changed. Try again"
end
end
這是我的表格edit_password.html.erb
<ul class="nav nav-pills">
<li class="active"><a href="#">Change Password</a></li>
<li><a href="#">Profile</a></li>
<li><a href="#">Messages</a></li>
</ul>
<hr/>
<%= render :template => 'users/edit_password_form',
:locals => { :resource => current_user, :resource_name => "user" } %>
edit_password_form.html.erb
<%= form_for(resource, :as => resource_name, :url => "password/users/update_password", :html => { :method => :put }) do |f| %>
<%# devise_error_messages! %>
<%= f.hidden_field :reset_password_token %>
<br>
<div class="row">
<div class="col-sm-3 col-md-3 ">
<%= f.label :current_password, "Current Password:" %>
</div>
<div class="col-sm-3 col-md-3 ">
<%= f.password_field :current_password, :placeholder =>"Current Password" %>
</div>
</div>
<br>
<div class="row">
<div class="col-sm-3 col-md-3 ">
<%= f.label :password, "New Password:" %>
</div>
<div class="col-sm-3 col-md-3 "><%= f.password_field :password, :placeholder=>"New Password" %>
</div>
</div>
<br>
<div class="row">
<div class="col-sm-3 col-md-3 ">
<%= f.label :password_confirmation, "Confirm New Password:" %>
</div>
<div class="col-sm-3 col-md-3 ">
<%= f.password_field :password_confirmation, :placeholder=>"Confirm New Password" %>
</div>
</div>
<br>
<br>
<%= f.submit "Change my password", :class => "btn btn-default" %>
<% end %>
我認為這與內置的devise功能無關,在該功能中,忘記了密碼,可以向他們發送電子郵件以重置密碼。 相反,您似乎允許他們輸入當前密碼,然后選擇一個新密碼。 在那種情況下,我認為您根本不需要表單中的reset_password_token
,因為它是無關緊要的,即您可以刪除該行:
<%= f.hidden_field :reset_password_token %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.