Craft CMS 3 - SocialプラグインにLogin Providerを追加する

Craft CMS 3のSocialプラグインはTwitter/Facebook/Googleに対応していますが、それ以外のログインプロバイダを追加したい場合、自前のプラグインにEvent::on()を書くことで追加できます。
Event::on(
LoginProviders::class,
LoginProviders::EVENT_REGISTER_LOGIN_PROVIDER_TYPES,
function(RegisterLoginProviderTypesEvent $event) {
$providers = $event->loginProviderTypes;
$providers[] = MyLoginProvider::class;
$event->loginProviderTypes = $providers;
}
);

あとは、どこに接続するかによって、league/oauth2-clientライブラリを利用したプロバイダーのコードが必要になりますが、githubで大抵のものは見つかるので、それをComposer等でインストールして使います。
例えばMastodonインスタンスに接続する場合。
$ composer require lrf141/oauth2-mastodon

最後に、dukt¥socialのログインプロバイダーのコードを書きます。
use Craft;
use craft\helpers\UrlHelper;
use dukt\social\base\LoginProvider;
use dukt\social\models\Token;
use Lrf141\OAuth2\Client\Provider\Mastodon;
use Lrf141\OAuth2\Client\Provider\MastodonResourceOwner;
class MyLoginProvider extends LoginProvider

/* hogehoge */

public function getOauthProvider(): Mastodon {
$config = $this->getOauthProviderConfig();
$config['clientId'] = $config['options']['clientId'];
$config['clientSecret'] = $config['options']['clientSecret'];
$config['scope'] = ['read write'];
$config['redirectUri'] = UrlHelper::siteUrl("actions/social/login-accounts/callback");// $config['options']['redirectUri'];
$config['instance'] = 'https://mstdn.jp';
return new Mastodon($config);
}

/* hoogehoge */

}

コメント
トラックバック
この記事のトラックバックURL