Usamos Discourse como nuestro sitio comunitario y tenemos un sitio web oficial.
Por lo tanto, esperamos que Discourse pueda iniciar sesión automáticamente después de que el usuario inicie sesión en nuestro sitio web oficial.
Nuestro sitio web oficial agregará una cookie cuando el usuario inicie sesión y usamos el intercambio de cookies en Discourse. Discourse obtiene la autorización en la cookie y obtiene la información del usuario para iniciar sesión.
La implementación del código es la siguiente:
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
def default_current_user_provider.rb
def log_off_user(session, cookie_jar)
……
cookie_jar.delete('authorization')
end
¿Me pregunto si hay algo malo en que haga esto? ¿Hay una mejor manera?