2012-04-05 6 views
2

J'essaie de gérer la session des utilisateurs après l'authentification avec ldap. La partie d'authentification fonctionne très bien, mais ne semble pas pouvoir générer l'identifiant de session. J'obtiens "une méthode non définie` id 'pour true: TrueClass "erreur.Ruby rails - gestion de session

Modèle -

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  

Controller -

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 

Voir -

<%= 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 %> 

L'erreur -

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

Répondre

3

Dans la définition de User#Authenticate, il peut retourner vrai. L'action create du contrôleur a session[:user_id] = user.id, mais dans ce cas, user est true. C'est pourquoi vous obtenez le message d'erreur non défini méthode `id 'pour true: TrueClass

Modifiez votre méthode Authenticate pour toujours retourner un utilisateur, ou modifiez votre contrôleur pour accepter true en tant que valeur utilisateur.

+0

Merci beaucoup John. Cela a résolu le problème. Mon autre question est - dans les rails, chaque session reste-t-elle indépendante en cas de connexions multiples du même identifiant d'utilisateur? –

+0

oui, chaque session est indépendante. –

+0

Merci ... et enfin - Comment puis-je stocker des attributs supplémentaires attachés à la session? Comme l'adresse e-mail ou le nom complet. –