Siguiendo la guía Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso), he habilitado Discourse SSO para compartir el inicio de sesión con mi aplicación RoR existente, pero obtengo “Error ArgumentError en DiscourseSsoController#sso, número incorrecto de argumentos (se dio 1, se esperaba 0)” después de ser redirigido a mi sitio web y haber iniciado sesión.
Al observar la captura de pantalla, parece que ese error proviene de tu aplicación Rails personalizada, y no de Discourse. ¿Es eso correcto? No creo que Discourse tenga un método DiscourseSsoController#sso, y el rastreo de la pila tampoco parece ser de Discourse.
¿Cómo has implementado ese método en tu aplicación Rails? ¿Has importado algunas partes del código de la base de código de Discourse? De ser así, tus importaciones podrían verse afectadas por este cambio: SECURITY: Attach DiscourseConnect (SSO) nonce to current session (#12… · discourse/discourse@13d2a1f · GitHub
Esta clase está en mi aplicación, pero es código oficial de Setup DiscourseConnect - Official Single-Sign-On for Discourse (sso) que he incorporado en mi aplicación para gestionar el SSO.
También seguí https://stackoverflow.com/questions/25478510/incorporating-discourse-sso-with-existing-rails-site-with-devise
Veo, ¿así que has copiado el contenido de single_sign_on.rb? Supongo que quizás necesitemos una actualización de la documentación aquí. ¿Podrías intentar agregar una nueva función dentro de la clase SingleSignOn en tu archivo single_sign_on.rb?
def initialize(**kwargs)
end
Creo que eso debería resolver el error que estás viendo.
¿También puedes confirmar qué versión de Ruby estás utilizando?
Sí, he copiado el contenido de single_sign_on.rb
Estoy usando Ruby 2.4.6
Después de agregar initialize, el error cambió
¿Reiniciaste el servidor? No puedo imaginar por qué se lanzaría un error en una línea end, así que sospecho que el código en ejecución no coincide con lo que hay en el sistema de archivos.
Eso podría ser parte del problema. El código de Discourse está escrito para versiones 2.7 y superiores.
Disculpe, fue mi error; no reinicié el servidor, ya que no noté que la modificación estaba en el initializer.
Al usar Devise con CanCanCan, también tuve que hacer esto: comentar before_action y agregar skip_authorization_check:
class DiscourseSsoController < ApplicationController
skip_authorization_check
#before_action :authenticate_user! # asegura que el usuario debe iniciar sesión
Ok, acabo de encontrar esto yo mismo.
Parece que la implementación de referencia utiliza una función que funciona en la versión 2.7+, que es instanciar un objeto con una referencia a un hash vacío.
args = {}
class A; end
A.new(**args) # funciona solo si ruby >= 2.7
Incluso en ruby >= 2.7, el código de referencia (lib/single_sign_on.rb) generará un error si intentas pasar un hash al llamar a #parse, porque en lib/single_sign_on.rb:65 se llama a sso = new(**init_kwargs) y #initialize(secure_session:) está definido en app/models/discourse_single_sign_on.rb:28, aunque DiscourseSingleSignOn hereda de SingleSignOn.
Eso no ayudaría a las personas que usan ese código y que o bien utilizan ruby < 2.7 en su proyecto o pasan algunos argumentos de palabra clave (kwargs).
Así que sí, como mínimo, creo que SingleSignOn debería implementar def initialize(**kwargs);end.
@david el enlace para está roto single_sign_on.rb
Lo he actualizado para que sea un permalink. El equivalente moderno es discourse_connect_base.rb
¡Gracias! Pero, ¿cómo puedo establecer mi usuario como administrador después de iniciar sesión con SSO?
Por favor, abre un nuevo tema de #soporte con información sobre lo que has intentado hasta ahora y cuál ha sido el resultado.

