迷い人

日々勉強。勉強の先に何か見つかるといいなぁ

【回答】認証機能について(ログイン)

問題

Railsにおけるログインの仕組みを説明して下さい

 

前提
  • deviseを使用せずにログインする

 

 

回答例

sessionの仕組みを利用して、以下の流れでログインを実現する。

 

  • ログイン画面から「メールアドレス」と「パスワード」を入力する
  • メールアドレスでユーザ検索し、保存されているパスワードと入力したパスワードを比較して一致したらログインさせる。
  • パスワードの一致確認には「authenticate」を使用する
  • ログインはsession[:user_id]にuser_idを格納することで実現する。

 

sessionとは

webブラウザを閉じなければ、ページを移動しても情報を保持できる仕組み。

 

例えば、セッションにユーザID(仮に1とする)を保存しておけば、商品一覧ページでもコメント入力ページでも問い合わせページでもユーザIDの値「1」を取得できます。

 

authenticateとは

has_secure_passwordメソッドを導入することで使用可能になります。

 

動作としては、暗号化(ハッシュ化)されたパスワードと画面から入力された通常文字列のパスワードを比較して、一致すればtrueを返却します。

 

 具体例でいうと

ユーザ登録する時に「password」を暗号化して「%2ehims」としてDB保存されているとすると、ログインするときにauthenticate("password")とすることで「%2ehims」と一致するか判断できます。

 

 

イメージ図は以下のようになります。

 

f:id:oyaoya1123:20191225031939p:plain

 

参考

Cookieとセッションをちゃんと理解する - Qiita

メールアドレスとパスワードによる基本的なユーザー認証 - Qiita

第8章 基本的なログイン機構 - Railsチュートリアル