purplespider / silverstripe-discourse-sso
使用Silverstripe成员账户登录Discourse
1.0
2022-02-15 15:07 UTC
Requires
- cviebrock/discourse-php: ^0.9.3
- silverstripe/cms: ^4
This package is auto-updated.
Last update: 2024-09-15 20:40:56 UTC
README
允许用户使用您基于Silverstripe的网站的用户账户登录Discourse。
注意:这将成为登录Discourse的唯一方式。要添加“登录为...”按钮,请考虑使用OAuth而不是SSO(请参阅DiscourseConnect)。
安装
- 使用composer将安装到您的Silverstripe网站
composer require purplespider/silverstripe-discourse-sso "1.*"
- 添加配置
PurpleSpider\DiscourseSSO\DiscourseSSOEndpoint: extensions: - PurpleSpider\MySite\DiscourseSSOEndpointExtension secret: REPLACE-WITH-RANDOM-STRING discourse-sso-url: "https://community.example.com/session/sso_login"
- 将
secret
设置为随机字符串(至少10个字符) - 将
https://community.example.com
更改为您的Discourse安装的URL。
- 执行dev\build
dev/build?flush=1
- 在Discourse管理员中配置DiscourseConnect。
- 设置 > 登录 >
启用 discourse connect
:启用
- 设置 > 登录 >
discourse connect url
:https://example.com/discourse/sso
(将example.com
替换为您的Silverstripe网站的域名。) - 设置 > 登录 >
discourse_connect_secret
: 设置为与Silverstripe配置中相同的随机字符串。
可选自定义
- 在Silverstripe端实现用户电子邮件验证(对于Discourse是必需的)。
- Discourse登出后重定向到Silverstripe登出页面:Discourse > 设置 > 用户 >
登出重定向
:https://example.com/Security/logout?BackURL=/home
- 在Silverstripe网站上登出后,在Discourse上登出用户。
- 自定义Silverstripe登录信息:app/lang/en.yml
en: PurpleSpider\DiscourseSSO\DiscourseSSOEndpoint: LOGINMESSAGE: "To access our forum, please log in or register:"
- 使用扩展将额外成员数据传递到Discourse,以及/或自定义登录认证,例如
<?php namespace YOURNAMESPACE; use SilverStripe\ORM\DataExtension; use SilverStripe\ORM\FieldType\DBField; class DiscourseSSOEndpointExtension extends DataExtension { public function updateExtraParameters(&$extraParameters, $member) { $extraParameters['add_groups'] = 'my-members'; $extraParameters['remove_groups'] = 'my-other-members'; $extraParameters['username'] = $member->ForumUsername; $extraParameters['custom.user_field_1'] = "Scotland"; } public function updateAuthentication(&$authenticated, $member, &$action) { if(!$member->EmailIsValidated) { $authenticated = false; $action = $this->owner->render(array( 'Title' => 'Please Verify Your Email Address', 'Content' => DBField::create_field( 'HTMLFragment', "<p>Your email address has not yet been verified.</p>" ), )); } } }
_config/discoursesso.yml
PurpleSpider\DiscourseSSO\DiscourseSSOEndpoint: extensions: - YOURNAMESPACE\DiscourseSSOEndpointExtension
感谢
非常感谢Colin Viebrock提供的Discourse Single-Sign-On Helper for PHP模块,该模块完成了所有繁重的工作。