Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
34
Help us understand the problem. What is going on with this article?
@Philomagi

Rails5 + APIモードで後からdeviseを使おうとした時のエラー対応

More than 3 years have passed since last update.

APIモードでRails構築した後からdeviseでログイン画面作ろうとしてドハマリしたので、備忘録も兼ねて記述

ハマるまでの経緯

  1. Rails + JSフレームワークでSPAを作ろうと考える
  2. APIサーバー構築のため、Rails5のAPIモードを使用
  3. 一般公開用ページとは他に、管理者用の管理ページ作成に着手
  4. ログイン処理周りも全部SPAの枠組みで作ろうとすると認証とか大変だったので、管理ページはRailsに組み込むことにした
  5. deviseインストール + 初期設定をGithubのReadme見ながら実施
  6. 管理ページを開こうとするとエラーになって動かない!

実施した対応

 エラーその1

undefined method 'flash' for#<ActionDispatch::Request>

  • なんかflashメソッドが見つかんないって怒られてる
  • 経緯5.まで実施して一番最初に発生

原因

対策

  • 以下の行を追加し、ActionDispatch::Flashがインストールされるようにする。
config/application.rb
config.middleware.use ActionDispatch::Flash

エラーその2

undefined method `protect_against_forgery?' for #<Class>

  • ログイン画面(/users/sign_in)にアクセスしようとすると発生
  • protect_against_forgery?は ここの394行目 で定義されている。
  • 上記モジュール(RequestForgeryProtection)自体はActionController::Base内でちゃんとincludeされてるっぽい(203〜251行目あたり)。

原因

  • Rails5をAPIモードで構築すると、ApplicationControllerの親がActionController::Baseではなく、ActionController::APIになる。
  • deviseの各コントローラーは、デフォルトでApplicationControllerを親として継承するようになっている(226・227行目)。
  • ActionController::APIは、RequestForgeryProtectionをindludeしていない(111〜143行目)

対策

  • deviseの各コントローラーが、ApplicationControllerではなくActionController::Baseを継承するようにする
config/initializes/devise.rb
config.parent_controller = 'ActionController::Base'

ここまで実施してからサーバーを再起動後、/users/sign_inにアクセスするとログイン画面が表示された。

34
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Philomagi
webプログラマ。最近は専らフロントエンド。 相方がRubyだったりTypescriptだったりコロコロ変わる浮気性。 たまにマジックしたり将棋したりする。 https://twitter.com/Philomagi
phper-oop
ペチオブはオブジェクト指向ワーキンググループです。様々なエンジニアの方に参加頂いております。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
34
Help us understand the problem. What is going on with this article?