Для моего проекта Ruby on Rails у меня есть модель Account
и модель User
. User
принадлежит account
, а account
имеет множество users
.
Для некоторых учетных записей я хочу разрешить пользователям использовать обычные маршруты Devise (то есть маршруты, контролируемые контроллером devise / session). Для некоторых других учетных записей я хочу разрешить пользователям использовать SAML / SSO для входа в систему.
Я успешно реализовал это, используя гемы Devise
и devise_saml_authenticatable
. Пользователи в своих учетных записях могут входить с использованием любого маршрута в зависимости от того, используют ли их учетные записи SAML / SSO. Я использую Onelogin в качестве провайдера идентификации.
Однако для выхода из системы. Я хочу, чтобы пользователи, чья учетная запись не использовала SAML / SSO, вышли из системы через
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
.
С этим я легко могу поставить =link_to 'Logout', destroy_user_session_path, method: :delete
С другой стороны, я хочу, чтобы пользователи, чья учетная запись использовала SAML / SSO, вышли из системы через путь SLO провайдера идентификации. Для одного из таких аккаунтов я пробовал
= link_to "Logout", 'https://mycompany.onelogin.com/trust/saml2/http-redirect/slo/xxxyyy'
https://mycompany.onelogin.com/trust/saml2/http-redirect/slo/xxxyyy - это ссылка SLO от Onelogin
Другим аспектом моего проекта является то, что пользователи, чья учетная запись использует SAML / SSO, также могут входить, используя обычные маршруты входа в систему. Поэтому они выбирают для входа либо единый вход, либо разрабатывают маршруты.
Если они вошли в систему, используя маршруты разработки, я хочу, чтобы они вышли через destroy_user_session_path
. Если они вошли в систему с помощью единого входа, я хочу, чтобы они вышли через https://mycompany.onelogin.com/trust/saml2/http-redirect/slo/xxxyyy
Есть ли способ определить, был ли текущий сеанс выполнен с использованием SAML / SSO, чтобы я мог сделать
if signed_in_with_sso
= link_to 'Log out', https://mycompany.onelogin.com/trust/saml2/http-redirect/slo/xxxyyy
else
= link_to 'Log out', destroy_user_session_path, method: :delete
Я не хочу создавать столбец в моей таблице пользователей, чтобы записывать, вошли ли они через SAML / SSO или просто разрабатывали каждый раз при входе. Другими словами, никаких миграций.
Спасибо!