LoginSignup
0
0

More than 1 year has passed since last update.

【Rails】Userモデルに後からDeviseを入れたらログインできなくなった事件

Posted at

起こった問題

Webサービスを作ろうとUserモデルを作成。
とりあえずRailsチュートリアルに倣って進めるも、Deviseが使いたくなったので途中で方針転換。
メール認証機能を作ったところでDeviseを導入、作り直すことに。

ユーザーの作成はできた(?)がどうもログインができず。
(エラーは出ないが「メールアドレスまたはパスワードが正しくない」と言われる。)
※もちろん正しいものでトライしてます。

結論

UserモデルにRailsチュートリアル内で作った名残が残っていたせいで不具合が起き、
encrypted_passwordにパスワードが保存されなかったことが原因でした。

user.rb
class User < ApplicationRecord

(以下抜粋)
 attr_accessor :remember_token, :activation_token, :activation_digest, :password_digest   #←ここ消す

 has_secure_password   #←ここ消す

Deviseでいいようにやってくれるのでhas_secure_passwordpassword_digest属性は不用。消しましょう。ということでした。
残してると色々メソッド名やらなんやらがバッティングしちゃってうまくいきません。
潔く思い出はさよならしましょう。

解決に至った経緯

とりあえずブラウザで作ったユーザーをコンソールで見てみる。

#ブラウザから作ったユーザーを取得
user = User.last 

user.valid?
=> false
user.encrypted_password
=> ""

user.valid?false
user.encrypted_password""

あれ、パスワード保存されてなくない?

疑惑① フォームからパスワードの送信or保存が上手くいってない?

であれば、コンソール上でユーザーを作成してみる。

user2 = User.new(name: "Test Taro", email: "test@example.com", password: "password", password_confirmation: "password")

user2.valid?
=> true

user2.valid?trueになったのでログインいけるかな?と思いきや
やはりアドレスかパスワードが違うと言われログインできない。

コンソールで見てみると

user2.encrypted_password
=> ""
user2.password
=> "password"

やっぱりencrypted_passwordが保存されてない。
一応、userpassword属性には値が入っている。

であればフォームのせいではなさそう。(自動生成されたものからいじってないし)

疑惑② もともと作っていたパスワード周りの何やかんやが悪さしているな。

一旦models/user.rbを見返す。いらないものは消していこう。

has_secure_password不要! →消す
→ログインを試みる
→エラー発生

ArgumentError in Devise::SessionsController#create
wrong number of arguments (given 1, expected 0)

Extracted source (around line #67):              
      def password=(new_password)
        @password = new_password
        self.encrypted_password = password_digest(@password) if @password.present? #ここに赤線入ってる
      end

      # Verifies whether a password (ie from sign in) is the user password.

引数いらないのに1個渡しちゃってるらしい。

何か思い当たる節は・・・ ん、password_digestという聞き覚えのある単語・・!!!

attr_accessor:password_digestが残ってたので消す

→解決!!!!

参考

【Rails】devise実装後のユーザー新規登録時のエラー[ArgumentError in Users::RegistrationsController#create]

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0