【回答】認証機能について(ログイン)
問題
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」と一致するか判断できます。
イメージ図は以下のようになります。
参考
メールアドレスとパスワードによる基本的なユーザー認証 - Qiita