2009-08-26 4 views
14

Так что я Authlogic работает отлично с этим user_sessions/new зрения:Не можете поместить адреса электронной почты поля на форме входа (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 %> 

Но когда я изменяю

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

в

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

Я получаю эту ошибку, когда загружаю вид:

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

Но, конечно, моя таблица пользователей имеет email поле и т.д.

ответ

31

Вы собираетесь об этом неправильный путь:

Try:

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

и user.rb

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

Ваш UserSession не имеет понятия электронной почты (он просто знает, авторизоваться).

Он проходит процесс поиска пользователя с использованием логина, который вы можете перехватить и переопределить (с помощью find_by_login_method). Для дополнительного бонуса вы также можете переопределить, login_field и password_field или даже verify_password_method

+2

Ницца (это имеет большой смысл - Authlogic болен!) –

+0

Согласитесь, я предпочитаю спокойную аутентификацию, дизайн супер прочный. –

+0

Если вы добавите find_by_login_or_email в User, вы можете оставить класс. find_by_login (login) || find_by_email (login) – Jared

-2

Он говорит, что в UserSession нет поля электронной почты. Он не смотрит на пользователя, так как у вас есть:

form_for @user_session 
-1

Я не знаю точно, как работает Authlogic, но я думаю, вроде того, что вы закончили с

Но, конечно, моих пользователей стол имеет поле электронной почты и т. д.

Из-за этого звука, это не обязательно означает, что у вашего пользователя есть его или нет?

+0

Authlogic сессия представляет собой модель, которая не затрагивает какой-либо базы данных, но вместо этого взаимодействует с моделью это выступая в качестве сессии для. – Aupajo

0

У меня была та же проблема, и обнаружил, что вы должны убедиться, что Логин не в схеме и базе данных (вам не нужно будет все равно, как вы «ве решил использовать электронную почту, как я)

18

Предполагая, что вы используете модель пользователя, самый простой способ использования электронной почты для аутентификации в Authlogic является:

class User < ActiveRecord::Base 

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

end 
+1

Просто дайте всем понять, что это отлично работает. ура – BenB

0

я мог быть совершенно неправильно об этом, но Я считаю, что если вы создадите модель пользователя с полем электронной почты и не войдете в поле ввода, то Authlog ic будет использовать это для UserSession. Однако, если ваша модель пользователя имеет поле входа, но вы ее не используете (т. Е. Вы переключили представление на: электронную почту, а не: логин), то UserSession все равно будет искать логин и не отправлять электронную почту, чтобы вы получили сообщение об ошибке ,

Если ваша пользовательская модель не имеет поля входа в систему, эта проблема должна исчезнуть, поскольку Authlogic по умолчанию будет использовать: вместо этого электронную почту.

1

Пожалуйста, убедитесь, что ваш user_session наследует UserSession < Authlogic :: Session :: Base, но не < ActiveRecord :: Base

 Смежные вопросы

  • Нет связанных вопросов^_^