Creo que empezaré borrando nuestro Droplet actual y configurándolo de nuevo desde cero, ya que este Docker se configuró hace unos años. Informaré cuando lo haya hecho y probado.
Suena como un buen plan. Para la mayoría de las comunidades, recomendamos mantener la rama predeterminada tests-passed, ya que te ofrece las últimas y mejores funciones de Discourse y correcciones de errores. Ha habido muchos cambios en la autenticación desde el último lanzamiento estable, por lo que es posible que encuentres que las cosas comienzan a funcionar por sí solas.
@david, hoy he tomado el tiempo de intentarlo de nuevo. Ahora estoy usando una instalación fresca de Discourse (la más reciente en stable-passed, como sugeriste).
He configurado OAuth2 usando el plugin, igual que antes, con la siguiente configuración:
oauth2 client id: MI-CLIENT-ID
oauth2 client secret: MI-CLIENT-SECRET
oauth2 authorize url: https://MI-NEON-ID.z2systems.com/np/oauth/auth
oauth2 token url: https://www.z2systems.com/np/oauth/token
Si utilizo la URL formateada manualmente, obtengo esto (que es nuevo):
La autorización se agotó o has cambiado de navegador. Por favor, inténtalo de nuevo.
Y el error habitual en los registros:
(oauth2_basic) ¡Fallo de autenticación! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detectado
Por otro lado, si uso el botón OAuth2 en la ventana de inicio de sesión de Discourse, obtengo:
Vaya
El software que impulsa este foro de discusión encontró un problema inesperado. Pedimos disculpas por las molestias.
Se registró información detallada sobre el error y se generó una notificación automática. Lo revisaremos.
También obtengo los siguientes errores registrados en /logs:
ArgumentError (URI inválido: ) /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/excon-0.71.0/lib/excon.rb:126:in `new'
y
Error al manejar la excepción en el middleware de la aplicación de excepción: URI inválido:
@david Probé tu sugerencia anterior sobre configurar oauth2_user_json_url y desactivar oauth2_fetch_user_details, y obtuve varios errores (nuevos) al intentarlo:
ActiveRecord::NotNullViolation (PG::NotNullViolation: ERROR: null value in column “provider_uid” violates not-null constraint
DETAIL: Failing row contains (1, oauth2_basic, null, null, 2019-12-19 01:00:49.076659, {}, {“token”: “9607”, “expires”: false}, {}, 2019-12-19 01:00:49.077107, 2019-12-19 01:00:49.077107).
)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.4/lib/patches/db/pg.rb:69:in `async_exec_params’
Failed to handle exception in exception app middleware : PG::NotNullViolation: ERROR: null value in column “provider_uid” violates not-null constraint
DETAIL: Failing row contains (1, oauth2_basic, null, null, 2019-12-19 01:00:49.076659, {}, {“token”: “9607”, “expires”: false}, {}, 2019-12-19 01:00:49.077107, 2019-12-19 01:00:49.077107).
Y, por supuesto, lo habitual:
(oauth2_basic) Authentication failure! csrf_detected: OmniAuth::Strategies::OAuth2::CallbackError, csrf_detected | CSRF detected
Sin embargo, noté en este último (CSRF detected) que en la pestaña de entorno dice:
hostname forum-app
process_id 762
application_version db7d00a8dce2cc1f7b9d86192cde1f55dd57408b
HTTP_HOST forum.efao.ca
¿Es normal que el hostname no coincida con el nombre de HTTP_HOST? ¿Podría ser esa la razón por la que obtengo el error de CSRF?
Hola Denis,
¿Alguna suerte?
Yo tengo el mismo error:
ActiveRecord::NotNullViolation (PG::NotNullViolation: ERROR: el valor nulo en la columna “provider_uid” viola la restricción de no nulo
¿Cómo lo solucionaste?
Gracias,
Beam
Denis y yo hemos determinado que NeonCRM no se ajusta realmente a la especificación oauth2… están enviando el user_id dentro de la variable access_token, y no se puede utilizar como un token de acceso real.
Por lo tanto, necesitas desactivar oauth2_fetch_user_details y establecer oauth2_callback_user_id_path en token (no access_token, porque la biblioteca ruby de oauth2 lo cambia de nombre para uso interno).
Con esto, debería funcionar, pero no hay forma de obtener el correo electrónico o el nombre del usuario.
¡Hola Denis,
Estoy usando Mattermost, así que se comporta de manera diferente.
Sin embargo, tu información me llevó a revisar más a fondo la configuración y ya lo tengo funcionando, ¡gracias!!
Aquí están mis configuraciones para Mattermost como proveedor OAuth2 en Discourse:
Configuraciones en texto para motores de búsqueda:
oauth2 client id: <client id from mattermost oauth2 provider setup>
oauth2 client secret: <client secret from mattermost oauth2 provider setup>
oauth2 authorize url:https://chat.animalrebellion.org/oauth/authorize
oauth2 token url:https://chat.animalrebellion.org/oauth/access_token
oauth2 token url method: POST
oauth2 callback user id path:
oauth2 callback user info paths
oauth2 fetch user details: MARCADO
oauth2 user json url:https://chat.animalrebellion.org/api/v4/users/me
oauth2 user json url method: GET
oauth2 json user id path: id
oauth2 json username path: username
oauth2 json name path: username
oauth2 json email path: email
oauth2 json email verified path: email_verified
oauth2 json avatar path:
oauth2 email verified: MARCADO
En el lado de Mattermost, la URL de devolución de llamada está configurada como:
https://base.animalrebellion.org/auth/oauth2_basic/callback
Aún me gustaría ver cómo unir first_name y last_name en el “jason name path” como full_name, pero puedo conformarme con usar simplemente la propiedad “username” o “first_name”.
Espero que esto ayude.
¡Saludos!
Beam
Enlaces a recursos:
Enlace al plugin: GitHub - discourse/discourse-oauth2-basic: A basic OAuth2 plugin for use with Discourse · GitHub
Enlace sobre cómo instalar el plugin de Discourse: Install plugins on a self-hosted site
¡Qué bueno que te haya funcionado, @Beam!
