无法在登录表单上放置电子邮件地址字段(Authlogic)

时间:2009-08-26 00:17:56

标签: ruby-on-rails authentication 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字段等等。

7 个答案:

答案 0 :(得分:31)

你这是错误的方式:

尝试:

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_fieldpassword_field甚至verify_password_method

答案 1 :(得分:18)

假设您使用的是用户模型,在Authlogic中使用电子邮件进行身份验证的最简单方法是:

class User < ActiveRecord::Base

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

end

答案 2 :(得分:1)

请检查您的user_session是否继承了UserSession&lt; Authlogic :: Session :: Base但不是&lt;的ActiveRecord ::基

答案 3 :(得分:0)

我遇到了同样的问题,并发现你必须确保登录不在您的架构和数据库中(因为您决定使用我的电子邮件,所以无论如何都不需要登录)

答案 4 :(得分:0)

我可能完全错了,但我相信如果你创建一个带有电子邮件字段且没有登录字段的用户模型,那么Authlogic将把它用于UserSession。但是,如果您的用户模型具有登录字段但您没有使用它(即您将视图切换为:电子邮件而不是:登录),那么UserSession仍将查找登录而不是电子邮件,因此您将收到错误消息

如果您的用户模型没有登录字段,则此问题应该消失,因为Authlogic将默认使用:电子邮件。

答案 5 :(得分:-1)

我不确切知道Authlogic是如何工作的,但我的猜测是你用

结束的
  

但当然我的用户表有一个电子邮件字段等等。

从它的声音来看,这并不一定意味着你的UserSession拥有它,或者它是否具有它?

答案 6 :(得分:-2)

据说在UserSession中没有电子邮件字段。它没有关注用户,因为你有:

form_for @user_session