IT技術にまつわる実験ノート

「長編を書くより、短編を数多く完成させてください。それが上達への近道です」 by 手塚治虫

devise の authenticate_user! の動作を調べてみる

動機

認証していない状態でルートパスにアクセスすると、強制的に users/sign_in パスにリダイレクトされる。この点について routes.rb を読んでも理解できなかった。

 

devise の公式 Wiki を読んでみる

以下のように、デフォルトの authenticate_user! メソッドは、認証されていないユーザーからのアクセスを、すべてログインページにリダイレクトする仕様になっているとのこと。

f:id:matt-note:20181030193255p:plain

 

以下のように、app/controllers/application_controller.rb で before_action :authticate_user! と定義している場合、全コントローラで共通して、認証していないユーザーをログインページにリダイレクトするようになる。

f:id:matt-note:20181030193936p:plain

 

only オプション

before_action メソッドに only オプションを渡すと、範囲を制限することができる。

f:id:matt-note:20181030202556p:plain

 

 Rails公式ドキュメントでの only オプションの説明は、以下の通り。

f:id:matt-note:20181030203626p:plain

f:id:matt-note:20181030203701p:plain

 

まとめ

devise を使うなら、authenticate_user! メソッドのデフォルトの動作を知っておく必要がある。このリダイレクトの動作については、routes.rb を読んでもわからない(と思う)。before_action メソッドの only オプションは便利。