4

タイトルがややこしいので説明します。次のコントローラーメソッドがあります。

  def password_update
      @op = params[:old_password]
      @np = params[:new_password]
      @cp = params[:confirm_password]

      if @np == @cp
        if !@np.empty?
          if current_user.update_with_password(:current_password=> @op)
              current_user.password = @np
              if current_user.save
                flash[:notice] = "Password Successfully Changed"
                redirect_to settings_path and return 
              end 
          else
            flash[:notice] = "Incorrent Current Password"
            redirect_to change_password_path and return 
          end
        else
          flash[:notice] = "New Password Cannot Be Blank"
        end   
      elsel
        flash[:notice] = "Incorrect Password Confirmation"
      end
      redirect_to change_password_path
    end

他のすべてはうまく機能します。つまり、このメソッドに移動し、フォームの送信時にそれを呼び出す作業ルートとビューがあることを意味します。ただし、パスワードを正しく変更しようとすると、エラーが発生します。ところで、私はDeviseを使用しています。送信をクリックするとログアウトされ、「このアクションを完了するにはサインインする必要があります」と表示されます。サインインしようとすると、現在のパスワードが機能しません。パスワードが(フォームで設定したものに)変更されました!サインインする必要があると表示されます (パスワードを変更しようとするとサインインします) が、それでも変更されます。

どんな助けでも大歓迎ですが、私は初心者であり、詳細な説明をいただければ幸いです。ありがとう!

4

1 に答える 1

8

Devise wikiのこのページがあなたの質問に答えると思います:https ://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-password

特にこのコード

 if @user.update_attributes(params[:user])
   # Sign in the user by passing validation in case his password changed
   sign_in @user, :bypass => true
   redirect_to root_path
 else
   render "edit"
 end

バイパスオプションもよく名付けられているようです。お役に立てれば。乾杯

于 2012-06-20T02:15:03.617 に答える