2010-11-05 17 views
1

Je vais implémenter l'authentification d'utilisateur RESTful contre un annuaire LDAP dans mon application Rails en utilisant net-ldap. J'ai déjà vérifié que cela fonctionne, mais où mettez-vous cela dans une application Rails? Est-ce que cela va dans une sorte d'aide? Dans mon UsersController?Où placez-vous l'authentification d'annuaire externe dans une application Ruby on Rails?

Voici un exemple d'un code d'authentification:

require 'rubygems' 
require 'net/ldap' 

ldap = Net::LDAP.new 
ldap.encryption :simple_tls 
ldap.host = 'directory.company.com' 
ldap.port = 636 
ldap.auth 'uid=human,ou=people,o=mycompany', 'turboSecret' 

if ldap.bind 
    puts 'win!' 
else 
    puts 'fail :(' 
end 

Répondre

1

Je mets cela dans app/controllers/sessions_controller.rb.

sessions_controller.rb

class SessionsController < ApplicationController 

    # Authenticate user against their LDAP directory 
    # user and directory correspond to models in my app 
    # password is a string 
    # For complete source, see http://github.com/sidewaysmilk/auther 
    def directory_login(user, password) 

    directory = user.directory 

    return nil if !directory 

    directory.bind_dn['%s'] = user.login 

    ldap = Net::LDAP.new 
    ldap.host = directory.host 
    ldap.port = directory.port 
    ldap.encryption :simple_tls if directory.use_simple_tls? 
    ldap.auth directory.bind_dn, password 
    if ldap.bind 
     return user 
    end 
    end 

end 
+0

J'abjurer cela. Cette logique devrait être poussée au moins dans le modèle, et peut-être même dans une lib séparée que le modèle appelle. –