Невозможно поместить поле адреса электронной почты в форму входа (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