Pythonとサラリーマンと

2020年6月にPythonを始めたサラリーマンのブログです。

Rails Tutorial 第9章を噛み砕く

【学ぶこと】 ・Cookiesを利用したログイン情報を維持するための機能

前章ではSessionを利用したログイン情報を維持する機能を学んだ。
本章ではCookiesを利用したログイン維持の機能を学ぶ。

Session = ブラウザを閉じるとログイン情報が消滅
Cookies = ブラウザを閉じてもログイン情報を保持

流れ

1.カラムの追加
rails generate migration add_remember_digest_to_users remember_digest:string
rails db:migrate

remember digestカラムを追加する

2.User Model Classへのメソッドの追加
new_tokenメソッド
def User.new_token →SecureRandomモジュールのurlsafe_base64メソッドでトークンを作成

rememberメソッド def remember
→remember_tokenオブジェクトにnew_tokenでトークンを作成し、update_attributeでremember_digestを更新??

authenticatedメソッド
def authenticated?(remember_token)
→remember tokenとremember digestを比較する

3.コントローラ用のヘルパーの追加(sessions_helper) def remember(user)
→CookiesメソッドでユーザIDとremember tokenを永続保存できるようにする

def current_user →session情報だけでなくCookies情報の有無も確認できるように変更する

4.ユーザを忘れる機能の追加
(model) def forget
→remember_digest属性をnilにする

(session helper)
def forget(user) →cookie情報を削除する

def logout →forgetメソッドを使ってcurrent userの情報を削除する

5.微調整(バグの修正) def destroy log_out if logged_in? →loginしている時にのみ、logoutを実行する(loginしていなければlogout実行しない)

def authenticated? return false if remember_digest.nil? →remember_digestがnilの場合は、比較しない

6.rememberチェックボックスの追加
(view)
form_forメソッドのcheckboxの追加 bootstrapで装飾

(sessions_controller)
create params[:session][:remember_me] == '1' ? remember(user) : forget(user) → Checkboxの値に応じてrememberメソッドか、forgetメソッドを実行する

以上