web-dev-qa-db-fra.com

Paramètres forts avec Rails et Devise

J'utilise la branche Rails 4.0 de devise avec Ruby 2.0.0p0 et Rails 4.0.0.beta1.

C'est le genre de question où je vérifie si je le fais correctement ou s'il y a d'autres choses que je devrais faire. Je suis sûr que beaucoup de gens qui migrent vers Rails 4.0 sont confrontés aux mêmes problèmes (après avoir googlé pour des choses similaires).

J'ai lu les liens suivants:

Maintenant, en utilisant devise, j'ai créé un modèle utilisateur, j'ai créé le contrôleur suivant à l'aide des éléments ci-dessus (et j'ai veillé à l'inclure dans mon fichier de routes). Mes paramètres supplémentaires sont prénom et nom.

class Users::RegistrationsController < Devise::RegistrationsController
  def sign_up_params
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation)
  end
  def account_update_params
    params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :current_password)
  end
  private :sign_up_params
  private :account_update_params
end

Y a-t-il autre chose que je devrais faire? Est-ce la meilleure façon de faire les choses à partir de maintenant (depuis la suppression de attr_accessor). Mes formulaires semblent bien fonctionner (à la fois la nouvelle et la mise à jour). Les gists ont dit d'utiliser "resource_params" mais cela a toujours donné l'erreur "Unpermitted parameters" dans mon journal de serveur.

54
user1202888

Merci pour les dernières mises à jour sur la branche Rails4 de Devise, il n'a pas vraiment besoin d'insérer 'resource_params'.

J'ai créé une toute nouvelle application Rails4 et suivi les étapes d'installation de base de Devise et mon application fonctionne correctement, donc je pense que vous avez bien fait.

Mais il y a un Gist modifié qui vous donne quelques détails supplémentaires en termes de paramètres autorisés si vous avez besoin:

Source: https://Gist.github.com/bluemont/e304e65e7e15d77d3cb9

# controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController

  before_filter :configure_permitted_parameters

  protected

  # my custom fields are :name, :heard_how
  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) do |u|
      u.permit(:name, :heard_how,
        :email, :password, :password_confirmation)
    end
    devise_parameter_sanitizer.for(:account_update) do |u|
      u.permit(:name,
        :email, :password, :password_confirmation, :current_password)
    end
  end
end
66
Zoltan

Pour Rails 5, Devise 4 Utilisez ceci:

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email, :password, :password_confirmation])
  end
end

Référence

26
Ronak Jain

Cela fonctionne très bien avec l'ajout d'un module dans config/initializers avec tous les parameters comme celui-ci

module DevisePermittedParameters
  extend ActiveSupport::Concern

  included do
    before_filter :configure_permitted_parameters
  end

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :email, :password, :password_confirmation) }
  end

end

DeviseController.send :include, DevisePermittedParameters
7
Rokibul Hasan