ruby-on-rails devise discourse

ruby on rails - Incorporación de Discourse SSO con el sitio de Rails existente con Devise



ruby-on-rails (1)

Esto es bastante sencillo. Siguiendo las instrucciones en https://meta.discourse.org/t/official-single-sign-on-for-discourse/13045 y extrapolando un poco, tengo este trabajo:

1) Coloque la implementación de referencia - https://github.com/discourse/discourse/blob/master/lib/single_sign_on.rb - en su directorio # {Rails.root} / lib

2) Añadir esta ruta a route.rb.

get ''discourse/sso'' => ''discourse_sso#sso''

3) Ponga este controlador en su directorio de aplicaciones / controladores

require ''single_sign_on'' class DiscourseSsoController < ApplicationController before_action :authenticate_user! # ensures user must login def sso secret = "MY_SECRET_STRING" sso = SingleSignOn.parse(request.query_string, secret) sso.email = current_user.email # from devise sso.name = current_user.full_name # this is a custom method on the User class sso.username = current_user.email # from devise sso.external_id = current_user.id # from devise sso.sso_secret = secret redirect_to sso.to_url("http://your_discource_server/session/sso_login") end end

4) Configure la configuración de SSO en el discurso para tener lo siguiente

sso url: http://your_rails_server/discourse/sso sso secret : what you set as MY_SECRET_STRING above

5) Deshabilitar otros tipos de inicio de sesión en el discurso.

6) Intenta iniciar sesión en el discurso. Deberia de funcionar...

Tengo una aplicación de rieles que utiliza dispositivos como autenticación de usuario. Agregué un foro de discursos, todo fue bien y reside en un subdominio. He leído la publicación en https://meta.discourse.org/t/official-single-sign-on-for-discourse/13045 pero todavía no sé qué hacer con el lado de las cosas una vez que el usuario inicia sesión en el sitio de rieles existentes. Actualmente este es el proceso como lo entiendo:

Paso 1: El usuario llega al foro de Discurso sobre el subdominio. El usuario necesita iniciar sesión para hacer clic en el botón de inicio de sesión.

Paso 2: el usuario se envía a la página de inicio de sesión en el sitio de rieles existente.

Paso 3: El usuario inicia sesión en el sitio de rieles.

Paso 4: El usuario debe ser redirigido al subdominio del foro de discurso que inició sesión.

Mi pregunta es: ¿qué debo hacer para que, cuando un usuario inicie sesión en el paso 3, sea redirigido de nuevo al subdominio? ¿Alguien ha implementado con éxito esto? Vi este fragmento de código en esa página de tutorial:

class DiscourseSsoController < ApplicationController def sso secret = "MY_SECRET_STRING" sso = SingleSignOn.parse(request.query_string, secret) sso.email = "[email protected]" sso.name = "Bill Hicks" sso.username = "[email protected]" sso.external_id = "123" # unique to your application sso.sso_secret = secret redirect_to sso.to_url("http://l.discourse/session/sso_login") end end

¿Es esto lo que necesitaría agregar en mi aplicación de rieles existente? Supongo que el análisis comprueba si esa información está en la url y, si es así, se redirige una vez que finaliza el proceso de inicio de sesión del dispositivo, y si no, simplemente funciona como de costumbre. ¿Colocaré este código en algún lugar de los archivos de dispositivos?