Tutorial9.2 remember userを消し忘れてハマったお話。
Tutorialも9章の終わりまで来ました。 最後にチェックボックスを作ってログインを保持するかどうかの切り替え機能をつけるのですが、そこで凡ミスしてハマったお話です。
概要
- チェックをつけずにブラウザを閉じてもログインが保持されている。
- チェックの有無にかかわらず、
remember_digest
が生成されている。
原因
早い話が、create
の中のremember user
を消し忘れたのと、きちんとブラウザが閉じられていなかったのが原因でした。
チェックボックスをつける前の項で、ユーザーがログインしたことを記憶するためにcreate
の中にremember user
(ヘルパー)を書いてあったのですが、チェックボックスを実装するために書き換えたコードでは削除されています。
当たり前ですが、これがあると問答無用で記憶されてしまいますので・・・
def create user = User.find_by(email: params[:session][:email].downcase) if user && user.authenticate(params[:session][:password]) log_in user params[:session][:remember_me] == '1' ? remember(user) : forget(user) remember user # <=これ redirect_to user else flash.now[:danger] = 'Invalid email/password combination' render 'new' end end
デバッグ情報見て問答無用でremember_digestが生成されていたので、絶対このせいだよな・・・とここで気づきました。 チュートリアルの文章中にはあえて削除するようには書かれていませんが、最終的なコードを見るとちゃんと消されてます。
で試しにコメントアウトしたところ、無事ちゃんと機能したようです。 しかしここでまたどうしようもない凡ミスが・・・
ブラウザがきちんと閉じられていなかったので何度消してもログイン状態が保たれてしまっていたのですね。 ×だけでなくきちんと「終了」をしましょう。って、そんな人いないか・・・
こんな感じで、2日も無駄にしましたとさ。めでたしめでたし。