2012-04-05 13 views
2

ldap로 인증 한 후 사용자 세션을 관리하려고합니다. 인증 부분은 잘 작동하지만 세션 ID를 생성 할 수 없습니다. "정의되지 않은 메서드`id 'for true : TrueClass"오류가 발생합니다.루비 레일 - 세션 관리

모델 -

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"} 

답변

3

User#Authenticate의 정의에서 true를 반환 할 수 있습니다. 컨트롤러의 create 작업은 session[:user_id] = user.id이지만이 경우 usertrue입니다. 그렇기 때문에 오류 메시지에 'id'가 true라는 정의되지 않은 오류 메시지가 나타나는 이유는 다음과 같습니다. TrueClass

항상 사용자를 반환하거나 사용자 값으로 true을 허용하도록 컨트롤러를 수정하십시오.

+0

감사합니다. John. 그것으로 문제가 해결되었습니다. 내 다른 질문은 - 레일즈에서, 동일한 사용자 아이디의 다중 로그인의 경우 각 세션이 독립적으로 유지됩니까? –

+0

예, 각 세션은 독립적입니다. –

+0

고마워요. 마지막으로, 세션에 추가 된 속성을 어떻게 저장할 수 있습니까? 이메일 주소 나 성을 좋아하십시오. –