осматривают , модуль является также замечательной функцией.
Вы делаете это неправильно:
Попробуйте:
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
Я не знаю точно, как работает Authlogic, но я предполагаю, что это то, чем вы закончили
Но из Конечно, в моей таблице пользователей есть поле электронной почты и т. д.
Судя по его звучанию, это не обязательно означает, что оно есть в вашей UserSession, или оно есть?
Это говорит о том, что в UserSession нет поля электронной почты. Он не смотрит на пользователя, так как у вас есть:
form_for @user_session
У меня была та же проблема, и я обнаружил, что вы должны убедиться, что логин не указан в вашей схеме и базе данных (вам он все равно не понадобится, так как вы решили использовать электронную почту, как я )
Assuming you're using a User model, the easiest way to use email for authentication in Authlogic is:
class User < ActiveRecord::Base
acts_as_authentic do |c|
c.login_field = 'email'
end
end
Я могу быть полностью неправ, но я считаю, что если вы создадите модель пользователя с полем email и без поля login, то Authlogic будет использовать его для UserSession. Однако, если ваша модель пользователя имеет поле login, но вы не используете его (т.е. вы переключили представление на :email, а не на :login), то UserSession все равно будет искать login, а не email, и вы получите сообщение об ошибке.
Если ваша модель пользователя не имеет поля login, то эта проблема должна исчезнуть, так как Authlogic по умолчанию будет использовать :email вместо него.