簡體   English   中英

設計:更改密碼reset_password_token為空

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM