認証ボタンを押しても応答しない問題
環境変数 WEB_URL に http:// や https:// が付いていないと、Discordがリンクボタンを拒否し、「アプリケーションが応答しませんでした」と表示されていました。
今回: スキームが無いときは自動で補います。それでもリンクを作れない場合は、ユーザーにエラーを表示し、原因をログに残します。
Web認証が「ボタンを押しても無反応」「成功と出るのにロールが付かない」状態だった問題を直しました。あわせて、サブ垢対策の強化と、認証ページのHTTPS対応を追加しています。
環境変数 WEB_URL に http:// や https:// が付いていないと、Discordがリンクボタンを拒否し、「アプリケーションが応答しませんでした」と表示されていました。
今回: スキームが無いときは自動で補います。それでもリンクを作れない場合は、ユーザーにエラーを表示し、原因をログに残します。
認証パネルを設置する前から参加していたメンバーなどが、Web認証で「すでに認証済みです」と表示され、ロールが付与されないことがありました。
今回: 認証待ちリストではなく、認証ロールを実際に持っているかで判定します。
同じ回線の判定で拒否されたアカウントも、回線の記録に残っていました。今回: 認証できた人だけを記録します。
ブラウザとDiscordの両方に「認証を拒否しました」と表示し、ログチャンネルに記録します。拒否されたアカウントは疑いリストには入らないので、回線を変えてやり直せます。
管理者は /verify approve で手動承認できます。suspect_action をキックにしているサーバーは、これまでどおりキックします。
block_alt_ip)が、新しいサーバーでは最初からONすでに設定が保存されているサーバーは変わりません。ONにするには /verify set block_alt_ip:True を実行してください。この判定は、認証方式が Web認証 のときに働きます。
Web認証が終わると、認証ボタンで出た自分だけに見えるメッセージが「認証が完了しました」に変わります。メッセージが残っていない場合は、DMでお知らせします。
証明書と秘密鍵のパスを設定すると、BOT自身がHTTPSで配信します。プロキシを挟まないので、同一回線やVPNの判定に使う接続元IPもそのまま取得できます。
証明書ファイルの更新は6時間ごとに確認して自動で読み込み直すため、Let's Encryptの更新後に再起動は要りません。CookieにはSecure属性が付きます。
Web認証のたびに、同じ回線の別アカウント数をログに出します。判定が働いているか確認できます。
| 名前 | 内容 |
|---|---|
WEB_URL | 認証ページの公開URL。例: https://bot-auth.duckdns.org:8443。スキームを省くと、TLS設定があれば https://、なければ http:// を補います。 |
PORT | 待ち受けポート。WEB_PORT より優先されます。 |
WEB_PORT | PORT が未設定のときのポート(既定 8080)。 |
TLS_CERT | 証明書(fullchain.pem)のパス。 |
TLS_KEY | 秘密鍵(privkey.pem)のパス。両方を設定するとHTTPSになります。 |
/verify approve で承認してください。.env の値が Environment= より優先されます。設定が反映されないときは、.env に古い WEB_URL や PORT が残っていないか確認してください。