Мы используем Discourse в качестве нашего сайта сообщества, и у нас есть официальный веб-сайт.
Поэтому мы надеемся, что пользователь сможет автоматически войти в Discourse после входа на наш официальный сайт.
Наш официальный сайт устанавливает cookie при входе пользователя, и мы используем совместное использование cookie в Discourse. Discourse получает авторизацию из cookie и извлекает информацию о пользователе для входа.
Реализация кода выглядит следующим образом:
application_controller.rb
before_action :check_cookie_login
def check_cookie_login
if !current_user && cookies[:authorization]
external_id = get_external_id cookies[:authorization]
cookie_log_on_user external_id
end
end
current_user.rb
def cookie_log_on_user(external_id)
sso_record = SingleSignOnRecord.find_by(external_id: external_id)
user = sso_record.user
log_on_user(user)
end
default_current_user_provider.rb
def log_off_user(session, cookie_jar)
……
cookie_jar.delete('authorization')
end
Не могли бы вы сказать, правильно ли я это делаю? Есть ли более подходящий способ?