th_9plus
@th_9plus (たかちゃん)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

deviseログイン変更時に エラー ruby on rails

deviseを使ったログインに変更したらこのようなエラーが出ました。
NoMethodError in UsersController#login
undefined method `authenticate' for #User:0x000055add69f9e88 Did you mean? authenticatable_salt

スクリーンショット 2020-09-12 21.24.01.png

has_secure_passwordからencrypt_passwordに変更しました。
いろいろと調べて見ましたが直りませんでした。
解決方法が分からないので教えて頂きたいです。

migrate/add_devise_to_users.rb
class AddDeviseToUsers < ActiveRecord::Migration[6.0]
  def self.up
    change_table :users do |t|
      ## Database authenticatable

      t.string :encrypted_password, null: false, default: ""

      ## Recoverable
      t.string   :reset_password_token
      t.datetime :reset_password_sent_at

      ## Rememberable
      t.datetime :remember_created_at
end
user.controller.rb
def login
    @user = User.find_by(email: params[:email])
    if @user && @user.authenticate(params[:password]) ←ここがエラーになりました。
      session[:user_id] = @user.id
      flash[:notice] = "ログインしました"
      redirect_to("/posts/index")
    else
      @error_message = "メールアドレスまたはパスワードが間違っています"
      @email = params[:email]
      @password = params[:password]
      render("users/login_form")
    end
  end
0

1Answer

authenticateメソッドはhas_secure_passwordUserモデル内で明示しておかないと動きません。なので原因はhas_secure_passwordを記述していないことかと思います。

ただ、deviseを使っているようなので、認証はvalid_password?を用いるのが正しい気がします。
authenticatevalid_password?に書き換えて見るとどうでしょうか?
https://www.rubydoc.info/github/plataformatec/devise/Devise/Models/DatabaseAuthenticatable

0Like

Comments

  1. @th_9plus

    Questioner

    できました!!!
    ありがとうございます!!!

Your answer might help someone💌