MoodleのOAuth2認証にてDiscordを追加する方法

# はじめに
MoodleのOAuth2認証にてDiscordを追加する方法を記載していく。筆者がこれを書いている時点では調べても十分な情報が出てこなかったため，後世に遺すこととする。また，初心者に対する手ほどきも兼ねる。

# 筆者の状況（求める読者像）
- OAuth2をよくわかっていない
- できれば応用というものをしたくなく，書かれていることをそのままやるだけがいい
- 英語を読みたくない
- とりあえず初心者
- Moodle 4.1.0

# Discord上での設定
### Discord DEVELOPER PORTALにログインする
### 右上の「New Application」から新しいアプリを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907258/829447b5-b0f8-c2ad-ae5e-82cce8141f43.png)
「Name」欄には，あなたが他のアプリと区別できる自由な名前（My Moodleなど）を入力する。何もわからない人は「TEAM」などをいじらず，最後のチェックボックスにチェックを入れて「Create」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907258/86e1a2d5-2e3e-febb-c98e-dd76e0fbbd6f.png)

### 左側のOAuth2を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907258/b77c5b73-dc4d-36c9-c2f9-95f84c9815fa.png)

### 「CLIENT ID」と「CLIENT SECRET」を控える。「CLIENT SECRET」は「Reset Secret」を押して発行し控える。（ここで出てきた情報は他人に明かさないこと）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907258/0460d1cf-f173-199b-dff1-dfcaf3fe71a5.png)

### 「Redirects」欄に「https://[あなたのMoodleのアドレス]/admin/oauth2callback.php」を「Add Redirect」する。
### 左側のメニューから「URL Generator」を押す。
「SCOPES」で「identify」，「email」，「connections」にチェックする。
「SELECT REDIRECT URL」で6. で入力したリダイレクトURLを選択する。
「GENERATE URL」のURLを「Copy」する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907258/7c5be07e-d481-b5fc-5076-d3dca77fcf42.png)

# Moodle上での設定
### 「サイト管理」→「プラグイン」→「認証」→「認証管理」で，「OAuth 2」を有効（目が見えている状態）にする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907258/bf1b569f-5ae6-3eda-6c88-213e49493b39.png)
 設定等は適宜行ってください。既存のアカウントで変更されたくないフィールドがある場合はロックするにしておくことをおすすめします。また，初期設定では対応するアカウントがなかった場合は，アカウント作成されます。禁止したいときは「authpreventaccountcreation」設定を有効にしてください。
 
### 「サイト管理」→「プラグイン」→「サーバ」→「サーバ」→「OAuth 2サービス」で，「カスタム」を選択する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907258/7c069c5d-b460-df2b-c34e-caf98b83b61b.png)
 次のように入力してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907258/fbef8828-449e-72a9-681f-68f99ee7b6f0.png)

| Moodle側 | 入力する値 |
|:-:|:-:|
| 名称 | （自由） |
| クライアントID | Discordの「CLIENT ID」 |
| クライアント秘密鍵 | Discordの「CLIENT SECRET」 |
| サービスベースURL | Discordの「GENERATE URL」で発行したURL |
| ロゴURL | （自由） |
| このサービスが使用される場所 | ログインサービスおよび内部サービス |
| ログインページの表示名 | （自由） |
| ログインリクエストに含まれるスコープ | identify email connections |
| オフラインアクセスのログインリクエストに含まれるスコープ | identify email connections |
| ログインドメイン | （空白でよい） |
|メール確認を必要とする|（僕はチェックを外しています）|
|私はメール認証無効化によるセキュリティ上の問題を理解しています。|（必須）|

### 「編集」の左から2つ目のアイコン「エンドポイントを設定する」を押す。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907258/eacf6378-8246-165f-be5f-d58daa7f26b0.png)
 次のように設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907258/a9ff54fe-8862-cd54-5d75-195d161c561f.png)

| 名称 | URL |
|:-:|:-|
| authorization_endpoint | 	https://discord.com/api/oauth2/authorize |
| token_endpoint | 	https://discord.com/api/oauth2/token |
| userinfo_endpoint | https://discord.com/api/users/@me |

### 「編集」の左から3つ目のアイコン「ユーザフィールドマッピングを設定する」を押す。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907258/eacf6378-8246-165f-be5f-d58daa7f26b0.png)
 僕は図のように設定しています。「email」は必須ですが，適宜設定してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1907258/05e0ac20-d697-57e8-ddd8-27f65c9d4a4b.png)

# 設定完了
これでMoodleのログインページにDiscordでログインするボタンが出てきたかと思います。