SecureRandom.urlsafe_base64
Ruby標準ライブラリのメソッド。長さ22文字の文字列を生成してくれる。base64文字列なので64の22乘通りあるため、衝突の可能性も限りなく低い。
アクセサ
インスタンス変数のゲッターとセッターのこと。rubyのクラスのインスタンス変数にはアクセサが無いとアクセスすることができない。attr_accessor
を使用することで自分で書くことなく利用できるようになる。
model(class)内でのselfの意味
チュートリアルでは、変数にself
をつける事でそのインスタンス内で共有が可能な変数を生成している。self
がない場合、ローカル変数になるとの記述があったので、おそらく定義したメソッドのスコープ内でのみ使用可能なものになってしまうはず。
ちなみにメソッドはクラスメソッド内でself
を使用するとクラスを指し、インスタンスメソッド内でselfはそのインスタンスになる。クラスメソッドはmodelクラスのレコードの更新や検索をする用に実装する。
class Article < ActiveRecord::Base def hoge #インスタンスメソッド end def self.hoge #クラスメソッド end def pdf #インスタンスメソッド self.hoge #インスタンスメソッドのhogeが呼ばれる hoge #インスタンスメソッドのhogeが呼ばれる self.class.hoge #こうするとクラスメソッドのhogeを呼べる end def self.pdf #クラスメソッド self.hoge #クラスメソッドのhogeが呼ばれる hoge #クラスメソッドのhogeが呼ばれる end end # https://qiita.com/suzuki_koya/items/1553c405beeb73f83bbc
cookiesメソッド
1つのvalueとオプションのexpires(有効期限)から成っている。下のようにpermanent
を使用すると有効期限が20年に設定される(よく20年設定が使われていた為)
cookies.permanent[:remember_token] = remember_token
それに伴いユーザIDの保存方法も変更する必要がある。signedを使用すると署名付きcookieを使うこと宣言し、permanentではcookieと同じ方法で永続化している。
#変更前 cookies[:user_id] = user.id #変更後 cookies.permanent.signed[:user_id] = user.id
ユーザIDを取得する際はcookies.signed[:user_id]
とする。
remember_me機能
remember_me
機能をチェックの有無でクッキーがブラウザに保存されるかが決まる。これだけでこの機能が実現できているのは、セッションにはチェックに関わらず、変数にユーザ情報を保持させているから。一周回って仕組みが把握しにくくなってきた。
ログアウト時のcookieの削除
ログアウト処理にてcookie
の値が正常に削除されたかをテストするには下のようにする。response
の中身のcookies
を覗かないと値が削除されていないので注意。
expect(response.cookies['user_id'].nil?).to eq false
インスタンス変数のテスト
インスタンス変数へはassigns
を利用することでアクセスが可能になる。チュートリアルではこれを用いることで今までテストされていないかったインスタンス変数をテストした。
#@user内のremember_tokenへアクセスしている expect(response.cookies['remember_token']).to eq assigns(:user).remember_token