Dans le cas ci-dessous, j'essaie d'utiliser des paramètres puissants. Je veux exiger mais en utilisant comme ci-dessous, il n'autorise que la dernière ligne forte> dans la méthode ex : - Dans un cas ci-dessous, il ne prend que Un autre ex: - Dans ce cas ci-dessous, si je le réorganise Comme ci-dessous, il ne prendra que strong>
Les params hachage sont comme p> e-mail_address, mot de passe code> et permis
mémoriser les champs_me cod>.
param.permit (: mémoriser) code> p>
param.require (: email_address) code> où suis-je mal? p>
4 Réponses :
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> Créez un Avec cela, vous obtiendrez de belles erreurs conviviales si: p>
modèles / session.rb strong> p>
Créez le contrôleur. Voici ce que votre contrôleur ressemblerait à la journalisation dans un utilisateur: p>
Configurez la vue p>
enfin, assurez-vous que les itinéraires sont configurés p>
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>
get 'login' => 'sessions#new'
post 'login' => 'sessions#create'
<% 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 %>
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
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
Je ne pense pas que nous puissions utiliser plusieurs exiger code> comme ça.
J'ai essayé ..now il dit Nométhoderror (méthode non définie code> 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?
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 :
def sign_in
email = params[:email]
password = params[:password]
if User.authenticate!(email, password)
# do something
else
# do something different
end
end
OK a trouvé la réponse à travers un ami ... Une façon de le faire est fonctionne bien. p> p>
Solution 2020:
def registration_params params.require([:email_address, :password]) #require all of these params.permit(:email_address, :password, :remember_me) #return hash end
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.