J'ai essayé de personnaliser la méthode de registre de devise pour enregistrer avec plus de paramètres et aussi mettre à jour plus (pas de chance jusqu'à présent), mais je reçois toujours Unpermitted parameters:
Erreur. J'ai essayé d'utiliser ceci Ajout de champs d'enregistrement supplémentaires avec Devise et https://github.com/plataformatec/devise#strong-parameters , mais je ne peux pas m'en remettre.
J'ai aussi pensé à créer une nouvelle table pour contenir une clé étrangère l'ID utilisateur et y mettre des trucs comme user_id, display_name, profile_picture
, mais j'aurais le même problème en essayant de tout soumettre à partir de la même page (désordre avec le contrôleur de devise).
Avez-vous des suggestions sur la façon de résoudre ce problème? Que dois-je encore publier?
routes.rb
devise_for :users, controllers: { registrations: 'users/registrations' }
utilisateurs/regC
def create
build_resource(registration_params)
if resource.save
if resource.active_for_authentication?
set_flash_message :notice, :signed_up if is_navigational_format?
sign_up(resource_name, resource)
respond_with resource, :location => after_sign_up_path_for(resource)
else
set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_navigational_format?
respond_with resource, :location => after_sign_up_path_for(resource)
end
else
clean_up_passwords
respond_with resource
end
end
private
def registration_paramss
params.require(:user).permit(:email, :display_name, :terms_of_services, :profile, :password, :password_confirmation)
end
Il semble que vous ayez juste besoin de dire aux paramètres à autoriser. Par défaut, devise autorise les paramètres email (ou nom d'utilisateur selon la configuration), mot de passe et password_confirmation. Vous avez juste besoin d'en ajouter plus.
Le concevoir la documentation suggère une "manière paresseuse" de configurer cela.
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:sign_up, keys: [:display_name])
end
end
La documentation indique ensuite que
Si vous avez des attributs imbriqués (supposons que vous utilisez
accepts_nested_attributes_for
), alors vous devrez parler de ces emboîtements et types.
Uniquement si vous devez remplacer le registrations#create
action, vous devez fournir votre itinéraire personnalisé pour la conception. Dans ce cas, assurez-vous de remplacer le sign_up_params
méthode aussi.
class Users::RegistrationsController < Devise::RegistrationsController
def create
# Your custom code here. Make sure you copy devise's functionality
end
private
# Notice the name of the method
def sign_up_params
params.require(:user).permit(:display_name, :email, :password, :password_confirmation)
end
end
Essentiellement, vous devez regarder comment votre formulaire d'inscription affiche les paramètres pour comprendre comment configurer des paramètres solides dans le contrôleur. Assurez-vous de lire également la syntaxe paramètres forts .
J'espère que cela aide!
Pour Devise 4.2.0, vous pouvez ajouter à la liste blanche des paramètres supplémentaires pour votre table d'utilisateurs en ajoutant ces valeurs aux clés. Par défaut, devise vous donne le commentaire à partir de maintenant. Ci-dessous, j'ai ajouté :avatar
# If you have extra params to permit, append them to the sanitizer.
def configure_sign_up_params
devise_parameter_sanitizer.permit(:sign_up, keys: [:attribute, :avatar])
end
Dans mon cas, cela a fonctionné:
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.permit(:account_update) { |u| u.permit(:name, :last_name, :image,:email, :password, :password_confirmation, :current_password) }
end
end