2009-08-26 3 views
14

Così ho Authlogic lavorare bene con questo user_sessions/new vista:Non si può mettere campo indirizzo e-mail sul modulo di login (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 %> 

Ma quando cambio

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

a

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

Viene visualizzato questo errore quando si carica la vista:

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

Ma, naturalmente, la mia tabella utenti ha un campo email, ecc

risposta

31

Si sta andando su questo nel modo sbagliato:

Prova:

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

e in user.rb

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

tuo UserSession non ha il concetto di e-mail (si sa solo di accesso).

Viene eseguito un processo di ricerca di un utente con un accesso, che è possibile intercettare e ignorare (con find_by_login_method). Per un ulteriore bonus si può anche ignorare, login_field e password_field o addirittura verify_password_method

+2

Bello (questo ha molto senso - Authlogic è malato!) –

+0

D'accordo, lo preferisco molto all'autentica autenticazione, il design è super solido. –

+0

Se aggiungi find_by_login_or_email all'utente, puoi interrompere la lezione. find_by_login (accesso) || find_by_email (login) – Jared

-2

Si sta dicendo che in UserSession non c'è campo e-mail. Non sta guardando l'utente, poiché è necessario:

form_for @user_session 
-1

non so esattamente come funziona Authlogic, ma la mia ipotesi è una specie di ciò che si è conclusa con

Ma naturalmente i miei utenti tabella ha un campo di posta elettronica, ecc.

Dal suono di esso, ciò non significa necessariamente che la sessione utente lo ha, o lo fa?

+0

Un Authlogic sessione è un modello che non tocca alcun database, ma invece interagisce con il modello è comportandosi come una sessione per. – Aupajo

0

Ho avuto lo stesso problema e ha scoperto che si deve fare in modo di accesso non è nel vostro schema e database (non sarà necessario comunque, come si 'ho deciso di impiegare e-mail come ho)

18

Supponendo che si sta utilizzando un modello d'uso, il modo più semplice per utilizzare la posta elettronica per l'autenticazione in Authlogic è:

class User < ActiveRecord::Base 

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

end 
+1

Solo facendo sapere a tutti che questo ha funzionato alla grande. Saluti – BenB

0

potrei essere del tutto sbagliato in questo, ma Credo che se crei un modello utente con un campo di posta elettronica e nessun campo di accesso, allora Authlog ic lo userà per UserSession. Tuttavia, se il tuo modello utente ha un campo di accesso ma non lo stai utilizzando (ovvero hai cambiato la vista in: email anziché: login), UserSession cercherà ancora l'accesso e non l'email, così riceverai il messaggio di errore .

Se il modello utente non dispone di un campo di accesso, questo problema dovrebbe andare via in quanto Authlogic utilizzerà di default: email.

1

Si prega di controllare che il vostro user_session eredita UserSession < Authlogic :: sessione :: Base ma non < ActiveRecord :: Base

Problemi correlati