2015-07-14 2 views
2

Я изучаю Rails (без опыта работы в веб-разработке и MVC), а также для улучшения своих навыков хотел реализовать приложение, в котором выполняется проверка подлинности в LDAP. Я читал RAILS 4 IN ACTION Райана Бигга и РУБИ НА ОБУЧЕНИИ ЖЕЛЕЗНЫХ ДОРОГ Майкл Хартл. Теперь в этих учебниках разрабатываемые приложения нуждаются в системе аутентификации. Они строят систему аутентификации с нуля. Поскольку имя пользователя/пароли сохранены в базе данных, они генерируют модель User. Мой вопрос: если я сохраняю данные пользователя в LDAP (и выполняю аутентификацию через LDAP), мне нужно создать модель пользователя? Модель User также используется для сохранения файлов cookie (для запоминания пользовательских сеансов). Означает ли это, что я должен генерировать модель User, но только сохранять данные сеанса? Любой указатель был бы оценен.Проверка подлинности Rails с помощью LDAP

+0

Я нахожусь в том же месте, что и вы. Было бы здорово, если бы вы могли поделиться тем, что вы сделали, чтобы помочь брату. :П – Fadi

ответ

1

Вам, разумеется, не нужно создавать модель, наследующую класс ActiveRecord::Base, но подходящий класс для хранения информации о пользователе подходит, даже если это только на время выполнения. Или вы действительно только хотите сделать аутентификацию, а затем забыть о пользователе?

Если вы заинтересованы в использовании LDAP с фактическим стандартом Rails для аутентификации - придумайте, взгляните на эту страницу Wiki https://github.com/plataformatec/devise/wiki/How-To:-Authenticate-via-LDAP.

Все, что вам нужно сделать, это просто использовать пользовательскую стратегию аутентификации.

require 'net/ldap' 
require 'devise/strategies/authenticatable' 

module Devise 
    module Strategies 
    class LdapAuthenticatable < Authenticatable 
     def authenticate! 
     if params[:user] 
      ldap = Net::LDAP.new 
      ldap.host = [YOUR LDAP HOSTNAME] 
      ldap.port = [YOUR LDAP HOSTNAME PORT] 
      ldap.auth email, password 

      if ldap.bind 
      user = User.find_or_create_by(email: email) #optional lookup 
      success!(user) # you do have to return some object 
      else 
      fail(:invalid_login) 
      end 
     end 
     end 

     def email 
     params[:user][:email] 
     end 

     def password 
     params[:user][:password] 
     end 

    end 
    end 
end 

Warden::Strategies.add(:ldap_authenticatable, Devise::Strategies::LdapAuthenticatable) 

Если вы хотите, чтобы избежать использования изобрести пойти надзирателя-https://github.com/renewablefunding/warden-ldap LDAP.