2009-08-26 101 views
14

所以我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场等

回答

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

+2

不错(这样做很有道理 - Authlogic生病了!) – 2009-08-26 03:50:27

+0

同意,我更喜欢它进行宁静的身份验证,设计非常稳固。 – 2009-08-26 03:54:57

+0

如果您将find_by_login_or_email添加到用户,您可以离开课程。 find_by_login(login)|| find_by_email(登录) – Jared 2010-12-15 22:28:05

-2

这是说,在UserSession没有电子邮件领域。这是不看的用户,因为你必须:

form_for @user_session 
-1

我不知道究竟Authlogic是如何工作的,但我的猜测是那种你

但我的用户,当然什么结束表有电子邮件字段等

从它的声音,这并不一定意味着你的UserSession有它,或者它呢?

+0

的Authlogic会议是不触及任何数据库的模型,而是与它的模型交互作为一个会议。 – Aupajo 2010-01-05 16:50:54

0

我有同样的问题,发现你必须确保登录是不是在你的架构和数据库(你无论如何也不会需要它,你已经决定采用电子邮件,因为我有)

18

假设你正在使用的用户模型,使用电子邮件在Authlogic认证的最简单的方法是:

class User < ActiveRecord::Base 

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

end 
+1

让大家知道这个效果很好。干杯 – BenB 2010-06-14 07:10:10

0

我可能是完全错误的有关这一点,但我相信,如果您创建一个带有电子邮件字段并且没有登录字段的用户模型,那么Authlog ic将使用这个用于UserSession。但是,如果你的用户模型有一个登录字段,但你没有使用它(例如,你将视图切换到:电子邮件而不是:登录),那么UserSession仍然在寻找登录,而不是电子邮件,所以你会得到错误信息。

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

1

请检查您的USER_SESSION继承UserSession < Authlogic ::会议:: Base的但不是<的ActiveRecord :: Base的

相关问题