メインコンテンツまでスキップ

NextcloudでExmentへログインする

前書き

envとexmentのログイン設定でシークレットとクライアントIDの設定を重複設定しています。
おそらくどちらか片方なくてもいいと思いますので片方にしたい方は必ずテストしてください。

今回,私のテスト用 NextcloudとExmentのURLは以下です。
[Nextcloud]
https://cloud.momijiina.tech/

[Exment]
https://momijiina.conohawing.com/

ExmentへNextcloudからログインする

Oauth2 を使います。

必要ならExmentの公式マニュアルを確認してください。

以下のコマンドを、Exmentのルートディレクトリで実行します。

composer require laravel/socialite=~5.1

続いてSocialiteProvidersからNextcloud専用のものを取得します。

実は公式ホームページには存在しませんがGithubでは配布されているのです。

composer require socialiteproviders/nextcloud

以下をexmentのconfig/services.phpへ追加する

'nextcloud' => [    
'client_id' => env('NEXTCLOUD_CLIENT_ID'),
'client_secret' => env('NEXTCLOUD_CLIENT_SECRET'),
'redirect' => env('NEXTCLOUD_REDIRECT_URI'),
'instance_uri' => env('NEXTCLOUD_BASE_URI')
],
全体コード(展開)
<?php

return [

/*
|--------------------------------------------------------------------------
| Third Party Services
|--------------------------------------------------------------------------
|
| This file is for storing the credentials for third party services such
| as Mailgun, Postmark, AWS and more. This file provides the de facto
| location for this type of information, allowing packages to have
| a conventional file to locate the various service credentials.
|
*/

'mailgun' => [
'domain' => env('MAILGUN_DOMAIN'),
'secret' => env('MAILGUN_SECRET'),
'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
'scheme' => 'https',
],

'postmark' => [
'token' => env('POSTMARK_TOKEN'),
],

'ses' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
],

'nextcloud' => [
'client_id' => env('NEXTCLOUD_CLIENT_ID'),
'client_secret' => env('NEXTCLOUD_CLIENT_SECRET'),
'redirect' => env('NEXTCLOUD_REDIRECT_URI'),
'instance_uri' => env('NEXTCLOUD_BASE_URI')
],
];

(必須)サービスプロバイダ追加(公式より)

以下のようにexmentのファイルapp/Providers/EventServiceProvider.phpを編集します。
アバターは追加およびテストをしてませんので公式を確認してください。

protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
],

\SocialiteProviders\Manager\SocialiteWasCalled::class => [
// NextcloudProvider
\SocialiteProviders\Nextcloud\NextcloudExtendSocialite::class.'@handle',
],
];

NextcloudでOauth2の設定をする

Nextcloud→セキュリティの一番下にあります

名前をExment(なんでもいいです)
Callbackを exmentのドメイン + /admin/auth/login/nextcloud/callback

[例] https://momijiina.conohawing.com/admin/auth/login/nextcloud/callback

※シークレットは一度しか取得できないので注意
なくしたらNextcloud側で再設定(クライアント再追加)

ExmentでOauth2の設定をする

Exment→管理者設定→システム設定→右上のシステム設定→ログイン設定 より
プロバイダ種類はnextcloudです

新規で作成し以下のように設定してください。
ユーザーの新規作成、グループなどはお好みですお願いします。

envファイルの追加

※ExmentのDB設定などの設定があるenv
CLIENT_IDとCLIENT_SECRETはNextcloud Oatuh2設定で初回取得できるものです

NEXTCLOUD_CLIENT_ID="YourCLIENT_ID"
NEXTCLOUD_CLIENT_SECRET="YourCLIENT_SECRET"
NEXTCLOUD_REDIRECT_URI="https://momijiina.conohawing.com/admin/auth/login/nextcloud/callback"
NEXTCLOUD_BASE_URI="https://cloud.momijiina.tech/"

ログインテスト

ログインテストボタンがありますが今回の設定では既にログインしているので別ユーザーでやると404が表示されるだけの可能性があります。

最悪は有効化してシークレットタブや別ブラウザでログインテストですかね。

メールアドレスも統一してある必要があります。