4

私はRailsを初めて使用しています.Rails 4 finalとdevise 3.0.0rc(Rails 4互換)を使用しています。両方を適切に構成し、サインアップは適切に機能していましたが、ある時点で、新しいユーザーを作成しようとすると (または既存のユーザーのプロファイルを編集しようとすると)、許可されていないパラメーター: first_name, last_name エラーが発生し始めました。このトピックについて同様の質問がいくつかありますが、Devise のサポートされていないバージョンについてです。私の構成は最初は正しく機能していました。

Processing by Devise::RegistrationsController#create as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"+DG4aeMPteQ4Mq9pPJ2JaitTVgp0NCW9nXi2qSv23zw=", "user"=>{"first_name"=>"John", "last_name"=>"Kenn", "email"=>"me1@email.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign Up"}
Unpermitted parameters: first_name, last_name
(0.2ms)  BEGIN
User Exists (0.4ms)  SELECT 1 AS one FROM "users" WHERE "users"."email" = 'me1@email.com' LIMIT 1
(0.2ms)  ROLLBACK

user.rb

class User < ActiveRecord::Base
  has_many :jobrecords, dependent: :destroy

  # after_create :send_welcome_email

  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable, :omniauthable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  validates :first_name,  presence: true
  validates :last_name,   presence: true
  validates :email,       presence: true
  attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :remember_me


  def self.from_omniauth(auth)
    where(auth.slice(:provider, :uid)).first_or_create do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.first_name = auth.info.nickname
      user.last_name = auth.info.nickname
    end
  end

  def self.new_with_session(params, session)
    if session["devise.user_attributes"]
      new(session["devise.user_attributes"], without_protection: true) do |user|
        user.attributes = params
        user.valid?
      end
    else
      super
    end    
  end

  def password_required?
    super && provider.blank?
  end

  def update_with_password(params, *options)
    if encrypted_password.blank?
      update_attributes(params, *options)
    else
      super
    end
  end

  private

    def send_welcome_email
      UserMailer.signup_confirmation(self).deliver
    end

end

以前は正常に動作していたのですが、registrations_controller.rb の sign_up_params をオーバーライドしてみましたが、うまくいきませんでした。私は引き続き openauth-twitter を使用してサインアップできます (これは、Twitter からサインアップするときにアプリが姓名を要求しないためです)。どんな助けでも大歓迎です。

4

1 に答える 1

5

したがって、あなたがまだこれを試したかどうかはわかりませんが、同様の問題があり、ApplicationController に「configure_permitted_pa​​rameters」メソッドを追加して、:sign_up と :account_update に devise_parameter_sanitizer を追加しました。 Devise ドキュメント: https://github.com/plataformatec/devise#strong-parameters

うまくいけば、これがまさにあなたが必要としているものではない場合でも、正しい方向に進むことができます.

于 2013-07-26T17:41:48.207 に答える