Tom*_*man 14 authentication ruby-on-rails 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 %>
Run Code Online (Sandbox Code Playgroud)
但是当我改变的时候
<%= f.label :login %><br />
<%= f.text_field :login %><br />
Run Code Online (Sandbox Code Playgroud)
至
<%= f.label :email %><br />
<%= f.text_field :email %><br />
Run Code Online (Sandbox Code Playgroud)
加载视图时出现此错误:
undefined method `email' for #<UserSession: no credentials provided>
Run Code Online (Sandbox Code Playgroud)
但当然我的用户表有一个email字段等.
Sam*_*ron 31
你这是错误的方式:
尝试:
class UserSession < Authlogic::Session::Base
find_by_login_method :find_by_login_or_email
end
Run Code Online (Sandbox Code Playgroud)
并在user.rb中
def self.find_by_login_or_email(login)
find_by_login(login) || find_by_email(login)
end
Run Code Online (Sandbox Code Playgroud)
您的UserSession没有电子邮件的概念(它只知道登录).
它运行一个查找用户登录的过程,您可以拦截和覆盖(使用find_by_login_method).对于一个额外的好处,你也可以覆盖,login_field并且password_field甚至verify_password_method
cai*_*ike 18
假设您使用的是用户模型,在Authlogic中使用电子邮件进行身份验证的最简单方法是:
class User < ActiveRecord::Base
acts_as_authentic do |c|
c.login_field = 'email'
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5348 次 |
| 最近记录: |