web-dev-qa-db-fra.com

Ajout de paramètres personnalisés pour concevoir l'enregistrement - paramètres non autorisés

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
10
Bogdan Daniel

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!

23
gkats

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
9
Jbur43

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
0
Nezir