Rails 4 / Devise Force用户在首次登录时更改密码

时间:2016-09-07 08:09:30

标签: ruby-on-rails devise

我有一个奇怪的问题,试图强迫我的用户在首次登录时更改密码。

我的服务器输出告诉我它已成功完成补丁,但是当我重新登录应用程序时它还是旧密码?我将在下面发布输出。

但首先是我的代码才能实现这一目标:

#application_controller.rb
      # Force PW Change On 1st Login
      def after_sign_in_path_for(resource)
        if current_user.sign_in_count == 1
          edit_passwords_path
        else
          authenticated_root_path
        end
      end



#passwords_controller.rb
  def edit
    @user = current_user
  end

  def update
    if current_user.update_without_password(user_params)
      flash[:notice] = "Password updated successfully."
      redirect_to authenticated_root_path
    else
      flash[:alert] = "There was a problem, please try again."
      render :edit
    end
  end

  private
    def user_params
      params.require(:user).permit(:password, :password_confirmation)
    end


#passwords form_for
<%= form_for current_user, url: passwords_path do |f| %>
  password:<br />
  <%= f.password_field :password %><br />
  password_confirmation:<br />
  <%= f.password_field :password_confirmation %><br />
  <br />
  <%= f.submit %>
<% end %>

#routes.rb
resource :passwords

除了实际保存新密码之外,强制密码正在执行它应该执行的所有操作。

我的服务器输出:

Started PATCH "/passwords" for ::1 at 2016-09-07 02:23:43 -0600
Processing by PasswordsController#update as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"zUOrOdquBht6uwvjvBkPj2yaO0dCgL+3XGhKo0YV1+W/4rEEiiIRHwwOzRCqvSVeVkAO0M7c73ogcmgNQDq/DQ==", "user"=>{"password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Update User"}
  User Load (0.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
   (0.1ms)  BEGIN
   (0.1ms)  COMMIT
Redirected to http://localhost:3000/
Completed 302 Found in 5ms (ActiveRecord: 0.7ms)


Started GET "/" for ::1 at 2016-09-07 02:23:43 -0600
  User Load (0.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
Processing by WelcomeController#index as HTML
  Rendering welcome/index.html.erb within layouts/application
  Rendered welcome/index.html.erb within layouts/application (0.4ms)
  Rendered layouts/navigation/_unassigned.html.erb (0.5ms)
  Rendered layouts/messages/_flash_msg.html.erb (0.5ms)
Completed 200 OK in 56ms (Views: 54.9ms | ActiveRecord: 0.0ms)

1 个答案:

答案 0 :(得分:1)

在PasswordsController#更新update_without_password更改为update_with_password

  def update
    if current_user.update_with_password(user_params)
      flash[:notice] = "Password updated successfully."
      redirect_to authenticated_root_path
    else
      flash[:alert] = "There was a problem, please try again."
      render :edit
    end
  end
相关问题