deviseのRails4.0.0対応に関して

  • 56
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

deviseのRails4.0.0対応状況

devise使ってますか?Rails4.0使ってますか?

ということでdevise使っててRails4.0で試そうとしたら、色々とうまくいかない!と困ってました。strong_parameter系ですね。
今までだと、各種コントローラーを継承したカスタムコントローラーでbuild_resourceをoverridesしてたんですが、4月中旬にやっとstrong_parameter対応のブランチがRails4ブランチにマージされました。
(masterブランチではないので注意)
ということで、導入は簡単になりました。

Railsへのrails4ブランチの導入

Gemfileはこう書けばいいですね。

Gemfile
gem 'devise', github: 'plataformatec/devise', branch: 'rails4'

カスタマイズしたい時の方法

カスタマイズしたいときはどうすればいいのかといいますと、
まぁ詳しくはgithubの公式を見ればいいんですが。
https://github.com/plataformatec/devise/tree/rails4#strong-parameters

strong_parametersに関係しているのは下記3つのアクションです。

  • Devise::SessionsController#new
  • Devise::RegistrationsController#create
  • Devise::RegistrationsController#update

それぞれ、

controller action 名前 permitされるparameters
sessions new sign_in email(※1)
registrations create sign_up email(※1),password, password_confirmation
registrations update account_update email,password, password_confirmation, current_password

※1 認証に使われるパラメータで必ずしもemailとは限らないみたいです。

また、それぞれの許可するパラメータを弄りたいときは下記のようにすると楽だそうです。

例: ユーザ名も追加するとき

app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:username, :email) }
  end
end

個人的にはちゃんとカスタムコントローラーでやるほうがRails的という印象です。

その後にちょっと書いてあるんですが、ちゃんとやるんだったらカスタムコントローラーでやりましょうね。ということらしいです。
application_controllerに書いちゃうと、アプリケーションが肥大化した時に、deviseはdeviseに分けて管理したくなるはずですし。

custom_devise/sessions_controller.rb

などを作って、そこでactionをoverrideするほうがいいかと思います。