gpt4 book ai didi

ruby-on-rails - 将 Discourse SSO 与现有 Rails 站点与 Devise 相结合

转载 作者:行者123 更新时间:2023-12-03 13:23:54 25 4
gpt4 key购买 nike

我有一个现有的 Rails 应用程序,它使用设计作为用户身份验证。我添加了 discourse forum一切都很顺利,它驻留在一个子域上。我已阅读 https://meta.discourse.org/t/official-single-sign-on-for-discourse/13045 的帖子但是一旦用户登录现有的 Rails 站点,仍然不知道如何处理设计方面的事情。目前这是我理解的过程:

Step1:用户在子域上点击 Discourse 论坛。用户需要登录,所以点击登录按钮。

Step2:用户被发送到现有Rails站点的登录页面。

Step3:用户登录rails网站。

Step4:用户应该被重定向到登录的话语论坛子域。

我的问题是 - 我需要做什么才能使用户在第 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

这是我需要在现有的 Rails 应用程序中添加的内容吗?我猜解析会检查该信息是否在 url 中,如果是,它会在完成设计登录过程后重定向,如果不是,它会像往常一样运行。我会将此代码放在设计文件中的某个位置吗?

最佳答案

这很简单。按照 https://meta.discourse.org/t/official-single-sign-on-for-discourse/13045 上的说明进行操作并推断一下,我有这个工作:

1) 放引用实现-https://github.com/discourse/discourse/blob/master/lib/single_sign_on.rb - 在您的 #{Rails.root}/lib 目录中

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

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

3) 将此 Controller 放在您的 app/controllers 目录中
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)在discourse中设置SSO配置有以下
sso url: http://your_rails_server/discourse/sso
sso secret : what you set as MY_SECRET_STRING above

5)禁用话语中的其他登录类型。

6)尝试登录话语。它应该工作...

关于ruby-on-rails - 将 Discourse SSO 与现有 Rails 站点与 Devise 相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25478510/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com