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