Ruby on rails 使用Desive将话语SSO与现有Rails站点合并

Ruby on rails 使用Desive将话语SSO与现有Rails站点合并,ruby-on-rails,devise,discourse,Ruby On Rails,Devise,Discourse,我有一个现有的rails应用程序,它使用Desive作为用户身份验证。我添加了一个,一切都很顺利,它驻留在一个子域中。我已经在上读过这篇文章,但仍然不知道一旦用户登录到现有的rails站点,如何处理设计方面的事情。据我所知,目前这是一个过程: 步骤1:用户点击子域上的对话论坛。用户需要登录,所以单击登录按钮 步骤2:用户被发送到现有rails站点上的登录页面 步骤3:用户登录rails站点 第四步:用户应该被重定向到话语论坛子域登录 我的问题是-我需要做什么才能让用户在第3步登录时重定向回子域?

我有一个现有的rails应用程序,它使用Desive作为用户身份验证。我添加了一个,一切都很顺利,它驻留在一个子域中。我已经在上读过这篇文章,但仍然不知道一旦用户登录到现有的rails站点,如何处理设计方面的事情。据我所知,目前这是一个过程:

步骤1:用户点击子域上的对话论坛。用户需要登录,所以单击登录按钮

步骤2:用户被发送到现有rails站点上的登录页面

步骤3:用户登录rails站点

第四步:用户应该被重定向到话语论坛子域登录

我的问题是-我需要做什么才能让用户在第3步登录时重定向回子域?有人成功地实现了这一点吗?我在演练页面上看到了以下代码片段:

  class DiscourseSsoController < ApplicationController
  def sso
    secret = "MY_SECRET_STRING"
    sso = SingleSignOn.parse(request.query_string, secret)
    sso.email = "user@email.com"
    sso.name = "Bill Hicks"
    sso.username = "bill@hicks.com"
    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
类话语SSOController

这就是我需要在现有rails应用程序中添加的内容吗?我猜解析会检查这些信息是否在url中,如果是,那么一旦完成Desive登录过程,它就会重定向,如果不是,它就会正常工作。我能把这个代码放在设计文件的某个地方吗

这很简单。根据上的说明并稍加推断,我有以下工作:

1) 将引用实现放在#{Rails.root}/lib目录中

2) 将此路由添加到routes.rb

get 'discourse/sso' => 'discourse_sso#sso'
3) 将此控制器放在应用程序/控制器目录中

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
5) 禁用对话中的其他登录类型


6) 尝试在对话中登录。它应该可以工作…

你有没有发现这个问题?你的问题有什么更新吗?我认为应该是控制器中的
在\u filter
之前,而不是
在\u action
之前。在Rails 4中,习惯于使用before\u action request.query\u字符串为零,它来自哪里?你能帮我知道为什么会这样吗?我已经听了你的回答。@DanSingerman我们应该在现有的rails应用程序上点击的第一条路线是什么,我目前正在点击,但生成时出错payload@kamal您应该在尝试登录到对话(也有一堆加密的URL参数)后点击该按钮
sso url: http://your_rails_server/discourse/sso
sso secret : what you set as MY_SECRET_STRING above