Utilisation d'une portion d'authentification personnalisée simple pour mon application Ruby on Rails. J'essaie de rendre l'email requis quand l'utilisateur s'enregistre avec l'application mais quand j'essaye le processus d'enregistrement, un enregistrement est créé dans la base de données mais l'email est mis à zéro. Voici un code:Ruby on Rails - Champ défini sur
Mon modèle:
class User < ActiveRecord::Base
attr_accessor :email, :password, :password_confirmation
before_save :encrypt
validates :password,
:presence => true,
:confirmation => true
validates :email,
:presence => true,
:uniqueness => true,
:format => { :with => /^[A-Za-z0-9._%+-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,}\z$/ }
def encrypt
if password.present?
self.password_salt = BCrypt::Engine.generate_salt
self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
end
end
def self.authenticate(email, password)
user = find_by_email(email)
if user && user.password_hash = BCrypt::Engine.hash_secret(password, user.password_salt)
user
else
nil
end
end
end
Mon contrôleur:
class UsersController < ApplicationController
skip_filter :login_required, :only => [:create, :new]
def new
@user = User.new
render :layout => 'unauthenticated'
end
def create
@user = User.new(params[:user])
@user.last_login = DateTime.now
@user.is_active = true
if @user.save
session[:user_id] = @user.id
redirect_to root_url
else
render :action => :new
end
end
end
La vue:
<div id="register">
<%= form_for @user do |f| %>
<% if @user.errors.any? %>
<div class="error">
<ul>
<% for message in @user.errors.full_messages %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<ul>
<li>
<%= f.label :email %>
<%= f.text_field :email %>
</li>
<li>
<%= f.label :password %>
<%= f.password_field :password %>
</li>
<li>
<%= f.label :password_confirmation %>
<%= f.password_field :password_confirmation %>
</li>
<li>
<%= f.submit 'Register' %>
</li>
</ul>
<% end %>
</div>
Pour une raison quelconque l'e-mail se prépare à zéro chaque fois qu'un l'utilisateur est enregistré. Le seul qui ressemble à l'email est le champ sur la vue, et la validation donc je ne sais pas si peut-être que la validation l'efface et qu'aucune erreur n'est levée. La méthode: login_required se trouve dans mon application_controller et est une vérification pour s'assurer que l'utilisateur est connecté à la session. Le skip_filter ne vérifie pas cela lorsque vous accédez aux pages de connexion et d'enregistrement.
Des idées? Merci d'avance.
Inspectez votre variable 'params' au début de la méthode create. –