【问题标题】:Rails devise forgot password, sends token, but password change failsRails 设计忘记密码,发送令牌,但密码更改失败
【发布时间】:2019-12-03 12:20:46
【问题描述】:

这是我的用户/密码/编辑表单

<%= simple_form_for(resource, as: resource_name, url: password_path(resource_name), html: { method: :put }) do |f| %>
        <% if resource.errors[:reset_password_token].present? %>
          <%= link_to 'request to reset your password again.', new_user_password_path %>
        <% end %>
        <%= f.error_notification %>

        <%= f.input :reset_password_token, as: :hidden %>
        <%= f.full_error :reset_password_token %>

        <div class="form-inputs">
          <%= f.input :password,
                      label: "New password",
                      required: true,
                      autofocus: true,
                      hint: ("#{@minimum_password_length} characters minimum" if @minimum_password_length),
                      input_html: { autocomplete: "new-password" } %>
          <%= f.input :password_confirmation, label: "Confirm your new password", required: true %>
        </div>

        <div class="form-actions">
          <%= f.button :submit, "Change my password", style: "color: #424141; margin-bottom: 6px; cursor: pointer; font-family: Arial, Helvetica, sans-serif; background-color: #ffffff; border: 0.76px; border-width: thin; border-style: solid; border-color: #4241; border-radius: 1px; padding: 0px 5px 0px 5px; height: 22px;" %>
        </div>
      <% end %>

密码控制器显示

def update
    Rails.logger.info "begin"
    Rails.logger.info params
    Rails.logger.info "second"
    Rails.logger.info params[:user][:reset_password_token]
    Rails.logger.info "end"
    self.resource = resource_class.reset_password_by_token(reset_password_token: params[:user][:reset_password_token], password: params[:user][:password], password_confirmation: params[:user][:password_confirmation])

    if resource.errors.empty?
      flash_message = resource.active_for_authentication? ? :updated : :updated_not_active
      set_flash_message(:notice, flash_message) if is_navigational_format?
      sign_in(resource_name, resource)
      # respond_with resource, :location => redirect_location(resource_name, resource)
      redirect_to edit_username_path(current_user)
    else
      if resource.errors.messages[:reset_password_token]
        resource.errors.messages.delete(:reset_password_token)
        resource.errors.messages[:password_reset_link] = ["has already been used"]
        Rails.logger.info resource.errors
      end
      # respond_with_navigational(resource){ render_with_scope :edit }
      redirect_to 'create'
    end
  end

我不知道要修复什么,但它打印出 resource.errors 和 params[:user][:reset_password_token],因此其中一种方法不起作用。

但错误显示在这一行:

self.resource = resource_class.reset_password_by_token(reset_password_token: params[:user][:reset_password_token], password: params[:user][:password], password_confirmation: params[:user][:password_confirmation])

【问题讨论】:

    标签: devise ruby-on-rails-5 reset-password


    【解决方案1】:

    重置密码令牌已被使用,所以页面就消失了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-11
      • 2013-10-20
      • 1970-01-01
      • 2020-09-23
      • 2012-01-07
      • 2014-08-05
      • 2014-06-27
      相关资源
      最近更新 更多