2015-01-19 2 views
0

У меня есть приложение ruby ​​on rails, которое проверяет подлинность пользователей через Yammer, а затем перенаправляет их в нужный арендатор в зависимости от их сетевого имени.Возврат сетевого поддомена от Yammer

Workflow в основном идет как это:

  1. Пользователь представлен со знаком в/страницу регистрации

  2. Authenticate через API Yammer и перенаправляется обратно обратного вызова URL (yammer.example.com/auth)

  3. Контроллер обратного вызова затем проверяет ответ автоответчика и определяет сеть, к которой принадлежит пользователь.

  4. перенаправить к этому арендатору на поддомен (например, my-network.example.com) и подписать пользователя в

Есть некоторые другие вещи, которые идут здесь в фоновом режиме (создание других пользователей в сети, сопоставление пользователей и т. д.), но проблема, с которой я столкнулась, связана с фактическим созданием и перенастройкой сетевого имени и поддомена.

Способ, которым в настоящее время обрабатывается поддомен, - использовать SLD имени сети пользователя.

В качестве примера network_name: "example.com" возвращает «пример» в качестве субдомена для создания или перенаправления.

Все это отлично работает, пока мы не начали тестирование с платной учетной записью Yammer, их сетевые имена, похоже, не очень хорошо сочетаются с нашим текущим кодом.

Это то, что сейчас мы используем:

if PublicSuffix.valid?(auth.extra.raw_info.network_name.mb_chars.normalize(:kc).to_s.downcase) 
    yammer_domain = PublicSuffix.parse(auth.extra.raw_info.network_name.mb_chars.normalize(:kc).downcase) 
    subdomain = yammer_domain.sld.gsub(/[^0-9A-Za-z]/, '') 
else 
    subdomain = auth.extra.raw_info.network_name.downcase.gsub(/[^0-9A-Za-z]/, '') 
end 

Я признаю, что это не самый чистый в данный момент, потому что я был взлом немного пытается поймать, когда имя сети не является правильным домена и его там. Я нормализую все символы, а затем разбираю SLD, используя драгоценный камень PublicSuffix.

Если это не является допустимым домена, то я пытаюсь нормализовать символы и зачистите все, что нам не нужно (так что-то вроде L'Oreal просто стать Loreal).

Это похоже на ошибку, а не на синтаксический анализ.

Так что мой вопрос:

Есть ли что-нибудь другое о том, как сетевые имена создаются с оплаченными счетами против свободных счетов? Есть ли более надежный способ вернуть имя сети для анализа поддоменов с помощью Yammer API?

ответ

2

Есть ли что-то другое в отношении того, как настроены сетевые имена с платной учетной записью и бесплатными аккаунтами?

Нет, нет.

Есть ли более надежный способ вернуть имя сети для анализа поддоменов с использованием Yammer API?

Если я понимаю, что вы пытаетесь сделать правильно, я не думаю, что «network_name» является правильным JSON-объектом для использования. Администратор сети может решить изменить имя сети в любое время, и это приведет к зависанию вашего приложения.

Я бы рекомендовал вам использовать «network_domains». Значение этого объекта JSON содержит список всех сетей yammer, в которые входит зарегистрированный пользователь, и первый элемент в списке ВСЕГДА является основной сетью пользователя. Например, результат запроса GET к API/v1/пользователей/current.json будет содержать что-то вроде:

network_domains ": [" jet.usa.cc "" jet.onmicrosoft.com »,« jet2.onmicrosoft.com »]

В приведенном выше примере jet.usa.cc является основной сетью зарегистрированного пользователя. Невозможно изменить имя сетевого домена, это постоянная. извлеките значение основной сети в своем приложении RoR и используйте его по своему усмотрению.

+3

Основной домен может измениться, хотя это необычно, поскольку администратор не может сделать это напрямую. Обычно это результат некоторой слияния для организации. –

Смежные вопросы