14

所以我让 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字段等。

4

7 回答 7

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_field甚至password_fieldverify_password_method

于 2009-08-26T00:37:31.423 回答
18

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

class User < ActiveRecord::Base

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

end
于 2009-10-19T23:12:18.383 回答
1

请检查您的 user_session 是否继承了 UserSession < Authlogic::Session::Base 但不是 < ActiveRecord::Base

于 2011-07-19T09:13:50.443 回答
0

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

如果您的用户模型没有登录字段,那么这个问题应该会消失,因为 Authlogic 将默认使用 :email 代替。

于 2010-05-06T16:39:31.523 回答
0

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

于 2009-10-14T18:41:26.433 回答
-1

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

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

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

于 2009-08-26T00:33:13.103 回答
-2

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

form_for @user_session
于 2009-08-26T00:32:10.107 回答