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?