Enlace de usuario OAuth2 dentro de Discourse

Ocasionalmente, un usuario experimentará un problema donde cada vez que intenta iniciar sesión se le pide configurar una nueva cuenta de Discourse. Esto suele ocurrir en cuentas heredadas que acaban de volver a iniciar sesión en Discourse, o cuando se registraron con nombre de usuario y contraseña y ahora intentan iniciar sesión mediante OAuth. En el pasado, para resolverlo, era necesario vincular las credenciales Auth0 OAuth2 de ese usuario con su ID de usuario en Discourse ejecutando el siguiente comando desde la consola de Rails dentro de la instancia de Discourse:

PluginStore.set('oauth2_basic', 'oauth2_basic_user_google-apps|tony.danza@aol.com', {"user_id":7235})

El problema parece ser que esto ya no persiste; de hecho, devuelve =>True, cuando antes devolvía Ok. Estoy en un prompt de pry, algo que en el pasado no ocurría. Cuando salgo de Pry, también me saca de la consola de Rails.

¿Alguna idea de lo que podría estar ocurriendo aquí? ¡Gracias!

Utilizando este plugin: GitHub - discourse/discourse-oauth2-basic: A basic OAuth2 plugin for use with Discourse · GitHub

Ese comando está obsoleto; ahora el plugin utiliza la tabla de asociaciones de usuarios.

¿Podrías compartir un ejemplo del comando que ejecutaré ahora en lugar de @Falco? Gracias por tu ayuda :bowing_man:

Siguiendo el último comando @Falco, ¡gracias!

¿Alguna actualización o información sobre el comando @Falco?

Este archivo debería darte una idea de cómo construir el comando que necesitas:

Disculpa la demora, tuve que actualizar Discourse antes de intentarlo de nuevo. Le di una oportunidad al cambio, pero no tuve éxito. A continuación, el ejemplo de lo que he intentado desde entonces y que devuelve true.

[1] pry(main)> PluginStore.set('oauth2_basic', 'user_associated_accounts_google-apps|tony.danza@gmail.com', {"user_id":1234})
=> true

Continuando con este tema, ¡gracias por la ayuda!

Maldita sea, me etiquetaste 7 veces mientras estaba de vacaciones…

En lugar de usar el método PluginStore.set, necesitas crear un nuevo UserAssociatedAccount, como por ejemplo:

UserAssociatedAccount.create!(provider_name: 'oauth2_basic', provider_uid: 'google-apps|tony.danza@aol.com', user_id: 7235)

Lo siento mucho, @Falco. Nosotros también hemos tenido dificultades cuando los miembros de la comunidad se van de vacaciones y no podemos mantener a todos informados. Espero que hayas tenido unas excelentes vacaciones y te pido disculpas.

Mañana probaré tu sugerencia y compartiré los resultados. Gracias nuevamente por tu ayuda :pray:

Hola @Falco, dando seguimiento a este tema. Cuando intento ejecutar el comando sugerido anteriormente, obtengo lo siguiente:

root@ip-172-31-20-121-app:/var/www/discourse# rails c
NOTA: Heredar de Faraday::Error::ClientError está obsoleto; usa Faraday::ClientError en su lugar. Se eliminará en la versión 1.0 o posterior.
Faraday::Error::ClientError.inherited llamado desde /var/www/discourse/plugins/discourse-github/gems/2.6.5/gems/octokit-4.14.0/lib/octokit/middleware/follow_redirects.rb:14.
[1] pry(main)> UserAssociatedAccount.create!(provider_name: 'oauth2_basic', provider_uid: 'google-apps|nico@auth0.com', user_id: 1722)
ActiveRecord::RecordNotUnique: PG::UniqueViolation: ERROR:  el valor de clave duplicado viola la restricción única "associated_accounts_provider_uid"
DETALLE:  La clave (provider_name, provider_uid)=(oauth2_basic, google-apps|nico@auth0.com) ya existe.
desde /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/rack-mini-profiler-1.1.3/lib/patches/db/pg.rb:69:in `async_exec_params'
Causado por PG::UniqueViolation: ERROR:  el valor de clave duplicado viola la restricción única "associated_accounts_provider_uid"
DETALLE:  La clave (provider_name, provider_uid)=(oauth2_basic, google-apps|nico@auth0.com) ya existe.

desde /var/www/discours