2009-08-26 5 views
14

Así que tengo Authlogic trabajar bien con esto user_sessions/new vista:no se puede poner el campo de dirección de correo electrónico en el formulario de acceso (Authlogic)

<% form_for @user_session, :url => user_session_path do |f| %> 

    <% if @user_session.errors.present? %> 
    Invalid username or password 
    <% end %> 

    <%= f.label :login %><br /> 
    <%= f.text_field :login %><br /> 
    <br /> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password %><br /> 
    <br /> 
    <%= f.check_box :remember_me, :style => 'margin-right: 10px' %> 
    <%= f.label :remember_me %><br /> 
    <br /> 
    <%= f.submit "Login" %> 
<% end %> 

Pero cuando cambio

<%= f.label :login %><br /> 
    <%= f.text_field :login %><br /> 

a

<%= f.label :email %><br /> 
    <%= f.text_field :email %><br /> 

consigo este error cuando cargo la vista:

undefined method `email' for #<UserSession: no credentials provided> 

Pero por supuesto, mi tabla de usuarios tiene un campo email, etc.

Respuesta

31

Vas de este por el camino equivocado:

Probar:

class UserSession < Authlogic::Session::Base 
    find_by_login_method :find_by_login_or_email 
end 

y en user.rb

def self.find_by_login_or_email(login) 
    find_by_login(login) || find_by_email(login) 
end 

Su UserSession no tiene concepto de correo electrónico (que sólo sabe de iniciar sesión).

Se ejecuta a través de un proceso de búsqueda de un usuario dado un inicio de sesión, que se puede interceptar y anulación (con la find_by_login_method). Para un bono adicional también puede anular, login_field y password_field o incluso verify_password_method

+2

Agradable (esto tiene mucho sentido - ¡Authlogic está enfermo!) –

+0

Estoy de acuerdo, lo prefiero a la autenticación tranquila, el diseño es súper sólido. –

+0

Si agrega find_by_login_or_email al usuario, puede dejar la clase. find_by_login (inicio de sesión) || find_by_email (login) – Jared

-2

Está diciendo que en UserSession no hay ningún campo de correo electrónico. No está mirando el usuario, ya que usted tiene:

form_for @user_session 
-1

no sé exactamente cómo funciona Authlogic, pero yo creo que es una especie de lo que terminó con

Pero, por supuesto, mis usuarios la tabla tiene un campo de correo electrónico, etc.

Por el sonido de eso, eso no significa necesariamente que su UserSession lo tenga, ¿o no?

+0

una sesión Authlogic es un modelo que no toque ninguna base de datos, sino que interactúa con el modelo que es actuando como una sesión para. – Aupajo

0

que tenía el mismo problema y descubrió que usted tiene que asegurarse de inicio de sesión no está en su esquema y base de datos (que no lo necesitará de todos modos como se 'he decidido emplear el correo electrónico como tengo)

18

Suponiendo que estés utilizando un modelo de usuario, la forma más fácil de usar para la autenticación de correo electrónico en Authlogic es:

class User < ActiveRecord::Base 

    acts_as_authentic do |c| 
    c.login_field = 'email' 
    end 

end 
+1

Solo para que todos sepan que esto funcionó muy bien. aclamaciones – BenB

0

que podría ser totalmente equivocado acerca de esto, pero Creo que si crea un modelo de usuario con un campo de correo electrónico y no hay un campo de inicio de sesión, entonces Authlog ic usará esto para la sesión de usuario. Sin embargo, si su modelo de usuario tiene un campo de inicio de sesión pero no lo está usando (es decir, cambió la vista a: correo electrónico en lugar de: inicio de sesión), UserSession seguirá buscando el inicio de sesión y no el correo electrónico, por lo que recibirá el mensaje de error .

Si su modelo de usuario no tiene un campo de inicio de sesión a continuación, este problema debe desaparecer a medida Authlogic utilizará por defecto: correo electrónico en su lugar.

1

favor compruebe que su user_session hereda UserSession < Authlogic :: sesión :: Base, pero no < ActiveRecord :: Base

Cuestiones relacionadas