7
votes

Plusieurs nécessitent des rails de paramètres forts 4

Dans le cas ci-dessous, j'essaie d'utiliser des paramètres puissants. Je veux exiger e-mail_address, mot de passe et permis mémoriser les champs_me .

mais en utilisant comme ci-dessous, il n'autorise que la dernière ligne dans la méthode ex : - Dans un cas ci-dessous, il ne prend que param.permit (: mémoriser) xxx

Un autre ex: - Dans ce cas ci-dessous, si je le réorganise Comme ci-dessous, il ne prendra que param.require (: email_address) où suis-je mal? xxx

Les params hachage sont comme xxx


1 commentaires

Pouvez-vous nous montrer votre formulaire d'inscription? On dirait que vous ne définissez pas la forme correctement pour utiliser des paramètres puissants.


4 Réponses :


0
votes

EDIT: strong>

Voici les rails pour vous de gérer les connexions et, je crois, des cas où vous devez "exiger" plusieurs paramètres et fournir des erreurs à l'utilisateur. P>

Contrairement à l'utilisation des paramètres solides, cette approche fournit des commentaires à l'utilisateur (à l'aide des erreurs de validation) lorsque les paramètres sont manquants ou vides. Ceci est plus convivial que de jeter une exception. p>

  1. Créez un ActiveModel code> ( pas em> activeCord code>) Formulaire objet de support. Cet objet de soutien forme est l'endroit où vous spécifiez quels champs sont requis et lorsqu'un appel à valide? Code> est effectué, ces champs seront validés. p>

    Avec cela, vous obtiendrez de belles erreurs conviviales si: p>

    • e-mail manque li>
    • Mot de passe manque Li>
    • Le courrier électronique et le mot de passe ne correspondent pas à li> ul>

      modèles / session.rb strong> p>

      get 'login' => 'sessions#new'
      post 'login' => 'sessions#create'
      
    • Créez le contrôleur. Voici ce que votre contrôleur ressemblerait à la journalisation dans un utilisateur: p>

      app / contrôleurs / sessions_controller.rb strong> p>

      <% if @session.errors.any? %>
        <ul>
          <% @session.errors.full_messages.each do |msg| %>
            <li><%= msg %></li>
          <% end %>
        </ul>
      <% end %>
      
      <%= form_for @session, :url => login_path do |f| %>
          <div>
            <%= f.label :email, 'Email:' %>
          </div>
          <div>
            <%= f.text_field :email %>
          </div>
          <div>
            <%= f.label :password, 'Password:' %>
          </div>
          <div>
            <%= f.password_field :password %>
          </div>
          <div>
            <%= f.label :remember_me, 'Remember Me?' %>
            <%= f.check_box :remember_me %>
          </div>
          <div>
            <%= f.submit %>
          </div>
      <% end %>
      
    • Configurez la vue p>

      app / vues / sessions / nouvelle.html.erb strong> p>

      class SessionsController < ApplicationController
        # GET /login
        def new
          @session = Session.new
        end
      
        # POST /login
        def create
          @session = Session.new(login_params)
          if @session.authenticate
            # do whatever you need to do to log the user in
            # set remember_me cookie, etc.
            redirect_to '/success', notice: 'You are logged in'
          else
            render :new   # shows the form again, filled-in and with errors
          end
        end
      
        private
      
        def login_params
          params.require(:session).permit(:email, :password, :remember_me)
        end
      end
      
    • enfin, assurez-vous que les itinéraires sont configurés p>

      config / routes.rb strong> p>

      class Session
        include ActiveModel::Model
      
        attr_accessor :password, :email, :remember_me
      
        validates_presence_of :password, :email        # these fields are required!
      
        def authenticate
          return false unless valid?   # this checks that required params
                                       # are present and adds errors to the
                                       # errors object if not
      
          if User.authenticate(:password, :email)  # validate credentials
            true
          else              
            errors.add(:email, "and password didn't match")  # wrong credentials. add error!
            false
          end
        end
      end
      


5 commentaires

Je ne pense pas que nous puissions utiliser plusieurs exiger comme ça.


J'ai essayé ..now il dit Nométhoderror (méthode non définie permis 'pour "mot de passe123 $": chaîne) `


Ne ressemble pas à des paramètres forts Travailler comme je pensais: / désolé. Pourriez-vous publier vos paramètres hachage?


Donc, lors de la lecture ultérieure, cela peut ne pas être la voie à rails de faire ce que vous essayez de faire. Utilisez-vous les paramètres que vous essayez d'exiger pour une mission de masse? (c.-à-d. les transmettre à un .new, .create, appelez-moi?). Ou regardez-vous simplement l'utilisateur dans la base de données?


En d'autres termes: Signez-vous un utilisateur ou vous les enregistrez?



0
votes

Les paramètres STONG sont d'empêcher l'attribution de masse aux modèles d'enregistrement actifs. Vos paramètres doivent être configurés dans un modèle de modélisation. Exemple de Tutoriel Michael Hartl :

FORMULAIRE D'INSCRIPTION STRUT> P>

def sign_in
   email = params[:email]
   password = params[:password]
   if User.authenticate!(email, password)
     # do something
   else 
     # do something different
   end
end


0 commentaires

14
votes

OK a trouvé la réponse à travers un ami ... Une façon de le faire est xxx

fonctionne bien.


0 commentaires

0
votes

Solution 2020:

def registration_params
  params.require([:email_address, :password])               #require all of these
  params.permit(:email_address, :password, :remember_me)    #return hash
end


0 commentaires