Web Marina

日々の業務や勉強などで得た知識をアウトプットしていきます。

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日も無駄にしましたとさ。めでたしめでたし。