Невозможно поместить поле адреса электронной почты в форму входа (Authlogic)
Итак, у меня есть Authlogic, прекрасно работающий с этим представлением user_sessions/new
:
<% 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
и т.д.
Ответы
Ответ 1
Вы делаете это неправильно:
Попробуйте:
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
Предполагая, что вы используете модель User, самый простой способ использования электронной почты для аутентификации в Authlogic:
class User < ActiveRecord::Base
acts_as_authentic do |c|
c.login_field = 'email'
end
end
Ответ 3
Пожалуйста, убедитесь, что ваш user_session наследует UserSession < Authlogic:: Session:: Base, но не < ActiveRecord:: Base
Ответ 4
У меня была такая же проблема, и я обнаружил, что вы должны убедиться, что логин не находится в вашей схеме и базе данных (вам все равно не понадобится, поскольку вы решили использовать электронную почту, как я)
Ответ 5
Я мог бы полностью ошибиться в этом, но я считаю, что если вы создадите модель пользователя с полем электронной почты и не войдете в поле ввода, Authlogic будет использовать это для UserSession. Однако, если ваша модель пользователя имеет поле входа, но вы ее не используете (т.е. Вы переключили представление на: электронную почту, а не: логин), то UserSession все равно будет искать логин и не отправлять электронную почту, чтобы вы получили сообщение об ошибке.
Если ваша модель пользователя не имеет поля входа в систему, эта проблема должна исчезнуть, поскольку Authlogic по умолчанию будет использовать: вместо этого адрес электронной почты.
Ответ 6
Я не знаю точно, как работает Authlogic, но я предполагаю, что вы закончили с
Но, конечно, таблица моих пользователей имеет поле электронной почты и т.д.
Из звука этого, это не обязательно означает, что у вас есть UserSession или он?
Ответ 7
Говорят, что в UserSession нет поля электронной почты. Он не смотрит на пользователя, так как у вас есть:
form_for @user_session