web-dev-qa-db-fra.com

Concevoir et paramètres forts

Je voudrais savoir comment intégrer ces deux gemmes (devise + paramètres forts), car des paramètres forts seront probablement ajoutés au noyau Rails dans 4.0

toute aide est la bienvenue merci

39
Rodrigo Zurek

Mise à jour pour devise 4.x

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

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:username])
    devise_parameter_sanitizer.permit(:sign_in, keys: [:username])
    devise_parameter_sanitizer.permit(:account_update, keys: [:username])
  end
end

Après avoir ajouté les deux gemmes, la devise fonctionnera normalement.

Mise à jour: Avec la dernière version de Devise 3.x, comme décrit à devise # strong-parameters , la clé d'authentification (normalement le champ email) et les champs de mot de passe sont déjà autorisés. Cependant, s'il y a des champs supplémentaires sur le formulaire d'inscription, vous devrez informer Devise des champs supplémentaires à autoriser. La façon la plus simple de le faire est d'utiliser un filtre:

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

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :username
  end
end

Pour Devise 2.x, si vous utilisez la fonctionnalité de sécurité nécessitant explicitement la mise en liste blanche des paramètres viciés dans le modèle utilisateur:

include ActiveModel::ForbiddenAttributesProtection

les modifications nécessaires se trouvent à https://Gist.github.com/33507 qui remplace certains des contrôleurs.

54
ronalchn

Le moyen le plus simple consiste à ajouter un filtre avant simple dans votre ApplicationController. Si vous avez des rôles différents et/ou un autre scénario plus complexe, il existe d'autres options sur le lien ci-dessous:

https://github.com/plataformatec/devise#strong-parameters

9
Leo
before_filter :configure_sanitized_params, if: :devise_controller?

def configure_sanitized_params
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:firstname, :designation_id, :middlename, :previous_experiance_year, :previous_experiance_month, :lastname, :email, :username, :password, :password_confirmation, :previous_experiance, :empid, :dob, :timezone, :doj, :gender, :education, :comments, :locked, :deactivated, :reason, :phone, :deactivated_date, :image) }
  devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:remove_image, :firstname, :designation_id, :middlename, :lastname, :email, :username, :empid, :dob, :timezone, :doj, :gender, :education, :comments, :locked, :deactivated, :reason, :phone, :deactivated_date, :image) }
end
1
Anoob K Bava

Vous pouvez également essayer celui-ci, il inclut le permis de paramètres imbriqués

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

  protected

  def configure_permitted_parameters
   devise_parameter_sanitizer.permit(:sign_up, keys: [:username,:phone])
  # permit nested attributes
  # devise_parameter_sanitizer.permit(:sign_up, keys: 
  # [:username,:phone,profile_attributes:[:firstname, :lastname]])
  end
end

Cela fonctionnera avec Rails 4 et 5 devise et Rails

0
uzaif