39

Je voudrais savoir comment intégrer les deux de ces pierres précieuses (concevoir + paramètres forts), car de fortes params seront probablement ajoutés aux rails de base dans la version 4.0Concevoir et paramètres forts

toute aide est bienvenue grâce

Répondre

52

Mise à jour pour concevoir 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 pierres précieuses, concevoir fonctionnera normalement.

Mise à jour: Avec la dernière version de Devise 3.x, comme décrit au 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 devez indiquer à Devise les champs supplémentaires à autoriser. Le moyen le plus simple est avec 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 Concevoir 2.x, si vous utilisez la fonction nécessitant whitelisting explicitement les paramètres entachés de sécurité dans le modèle utilisateur:

include ActiveModel::ForbiddenAttributesProtection 

les changements nécessaires sont trouvés à https://gist.github.com/3350730 qui remplace certains des contrôleurs.

+0

Suivant la réponse est meilleure, à mon avis, car il relais sur Devise public API – msa7

+1

Ce serait parce que ma réponse était il ya plus d'un an. J'ai mis à jour la réponse en fonction des nouveaux développements. – ronalchn

+0

cette question est un exemple parfait de la façon dont le monde est petit, vous avez répondu à ma question avec mon propre point = D –

1
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 

Copiez et collez ce code à votre contrôleur d'application, aussi au lieu de: prenom, et d'autres champs, vous devez ajouter vos champs.

+0

ouais, c'est la nouvelle façon de le faire. la question a été posée le jour où le fabricant n'avait pas mis en place de paramètres forts sur son code. –

Questions connexes