Inicio de sesión de Discourse por token de cookie

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?

Esto es inseguro. Un usuario podría manipular la cookie en su navegador e iniciar sesión como otra persona.

Deberías usar DiscourseConnect en su lugar.

3 Me gusta

Gracias por tu sugerencia. Soy nuevo en Discourse. Si en su lugar uso DiscourseConnect, ¿necesitaré una API web para devolver un nonce que DiscourseConnect necesita?

1 me gusta