Не могу поместить поле адреса электронной почты в форму входа (Authlogic) - PullRequest
14 голосов
/ 26 августа 2009

Итак, у меня 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 и т. Д.

Ответы [ 7 ]

31 голосов
/ 26 августа 2009

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

Попробуйте:

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

18 голосов
/ 20 октября 2009

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

class User < ActiveRecord::Base

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

end
1 голос
/ 19 июля 2011

Убедитесь, что ваша user_session наследует UserSession

0 голосов
/ 06 мая 2010

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

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

0 голосов
/ 14 октября 2009

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

0 голосов
/ 26 августа 2009

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

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

Судя по звуку, это не обязательно означает, что он есть в вашей UserSession или нет?

0 голосов
/ 26 августа 2009

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

form_for @user_session
...