2
我正在嘗試使用ldap進行身份驗證後管理用戶會話。身份驗證部分工作得很好,但似乎無法生成會話ID。我得到「未定義的方法`id爲true:TrueClass」錯誤。Ruby rails - 會話管理
型號 -
def self.Authenticate(login, pass)
user = find_by_user_id(login)
if user
user
else
return false
end
conn = Net::LDAP.new(
:host => SERVER,
:port => PORT,
:base => BASE,
:auth => {
:username => "#{login}@#{DOMAIN}",
:password => pass,
:method => :simple
}
)
if conn.bind
return true
else
return false
end
rescue Net::LDAP::LdapError => e
return false
end
控制器 -
def create
user = User.Authenticate(params[:user_id], params[:password])
if user
session[:user_id] = user.id
redirect_to theapp_url, :notice => "Logged in!"
else
flash.now.alert = "Invalid email or password"
render "new"
end
end
視圖 -
<%= form_tag sessions_path do %>
<p>
<%= label_tag :Username %><br />
<%= text_field_tag :user_id, params[:user_id] %>
</p>
<p>
<%= label_tag :Password %><br />
<%= password_field_tag :password %>
</p>
<p class="button"><%= submit_tag "Log in" %></p>
<% end %>
錯誤 -
NoMethodError in SessionsController#create
undefined method `id' for true:TrueClass
Rails.root: /myapp
Application Trace | Framework Trace | Full Trace
app/controllers/sessions_controller.rb:12:in `create'
Request
Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"OmzCrLHR1t/xfIXNcEzy2NCGfVpEKSyI4OZfqpPEFNw=",
"user_id"=>"admin",
"password"=>"[FILTERED]",
"commit"=>"Log in"}
非常感謝John。這解決了這個問題。我的另一個問題是 - 在rails中,每個會話保持獨立的情況下,來自同一用戶ID的多個登錄? – 2012-04-05 01:12:33
是的,每個會話都是獨立的。 – 2012-04-05 01:14:25
謝謝...最後 - 如何存儲附加到會話的附加屬性?喜歡電子郵件地址或全名。 – 2012-04-05 01:22:12