ログインの仕組み
メールアドレスとパスワードでログインする仕様です。 まず送られてきたメールアドレス(メアド)をサーバーの中のsession(箱のようなイメージ)で受け取り そのsessionの中に格納されたメアドをfind_by(メアド)でdbからユーザーの情報を取得し@userに代入する①のパスワードと@userの中のパスワードが一致するとログインさせると言った仕組みでログインさせる。 ただ上記のログイン方法では「もしユーザーがタブを閉じる」とセッションが無効化され再びログインしないといけない。=アプリを開くたびにログインを求められめんどくさい。
remember me 仕組み
remember meとは?
⇨[ 人間に代わってpcがログインをしてくれる機能」].
上で説明させていただいたログイン方法だと人間がメールアドレスとパスワードを入力させて最後にログインボタンを押さないとログインできないと説明させてもらいました。
しかしremember me機能を使えば1度ログインするとそれ以降はコンピューターが自動でログインしてくれます。
つまりremember me機能を使えばsessionを一度貼れば永続的なログインの状態を保持できる。
どうやってremeber meの仕組みができているのか?↓
2つの情報をブラウザーのクッキー(情報を入れる箱)と言う場所に格納する.
2つの情報とは?
①署名付きuser_id(メアドの代わりになるもので記憶トークンをDBから取得するために必要).
②記憶トークン(パスワードの代わりになるもの).
記憶トークンとパスワードの違い.
記憶トークン=pcが作成.
パスワード=人間が作成.
ユーザーがアプリにアクセスするたびにクッキーの中の2つの情報があるのかを見て、あれば署名付きuser_idでデータベースから User.find(user_id)でユーザー情報を@userのような形で取得し、その@userの中にあるハッシュ化されたパスワードと記憶トークンが一致するかを判断し一致した場合にログインさせる。
まとめ.
remeber meはpcが人間の代わりにログインを行う機能。
コードを書く前に全体像をイラストや図でイメージしてからコードを書く方が何しているのかわかりやすい。