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

ユーザーモデルを使用していると仮定すると、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

私は同じ問題を抱えていて、ログインがスキーマとデータベースにないことを確認する必要があることを発見しました(私が持っているように電子メールを使用することにしたので、とにかくそれは必要ありません)

于 2009-10-14T18:41:26.433 に答える
0

私はこれについて完全に間違っている可能性がありますが、電子メールフィールドがあり、ログインフィールドがないユーザーモデルを作成すると、AuthlogicはこれをUserSessionに使用すると思います。ただし、ユーザーモデルにログインフィールドがあり、それを使用していない場合(つまり、ビューを:loginではなく:emailに切り替えた場合)、UserSessionは引き続きログインを探し、電子メールではないため、エラーメッセージが表示されます。 。

ユーザーモデルにログインフィールドがない場合、Authlogicはデフォルトで:emailを使用するため、この問題は解消されます。

于 2010-05-06T16:39:31.523 に答える
-1

Authlogicがどのように機能するかは正確にはわかりませんが、私の推測はあなたが何で終わったかのようなものです

しかしもちろん、私のユーザーテーブルにはメールフィールドなどがあります。

それの音から、それは必ずしもあなたのUserSessionがそれを持っているという意味ではありませんか、それともそうですか?

于 2009-08-26T00:33:13.103 に答える
-2

UserSessionにはメールフィールドがないということです。あなたが持っているので、それはユーザーを見ていません:

form_for @user_session
于 2009-08-26T00:32:10.107 に答える