purplespider/silverstripe-discourse-sso

使用Silverstripe成员账户登录Discourse

安装: 7

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 2

分支: 1

类型:silverstripe-vendormodule

1.0 2022-02-15 15:07 UTC

This package is auto-updated.

Last update: 2024-09-15 20:40:56 UTC


README

允许用户使用您基于Silverstripe的网站的用户账户登录Discourse。

注意:这将成为登录Discourse的唯一方式。要添加“登录为...”按钮,请考虑使用OAuth而不是SSO(请参阅DiscourseConnect)。

安装

  1. 使用composer将安装到您的Silverstripe网站
composer require purplespider/silverstripe-discourse-sso "1.*"
  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。
  1. 执行dev\build
dev/build?flush=1
  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模块,该模块完成了所有繁重的工作。