ログアウトロジックで課題が発生しています。
Auth0設定とDiscourse OAuth2を使用しています。問題は、currentUser.destroySession() を使用してログアウトをトリガーすると、ユーザーはログアウトされるためDiscourseセッションは終了しますが、OAuthデータが何らかの形でキャッシュされていることです。
ここで何を意味するかというと?
コンテキスト: SSOを使用している場合、ユーザーがサイトからログアウトすると、次にログインしようとしたときに、サイトからSSOページにリダイレクトされ、そこで資格情報を入力できるようになり、認証されると、アクティブなセッションでサイトに戻されることが期待されます。
上記のコンテキストを使用すると、Discourseはユーザーを完全にログアウトしていないようです。そのため、Discourseからログアウトしても問題なく機能しますが、フォーラムサイトに再度ログインしようとすると、DiscourseはSSOページを再度トリガーせず、以前にログインしたSSOアカウントを何らかの方法で記憶しており、自動的にユーザーを選択してログインします。これは非常に奇妙です。
これは基本的に、そのユーザーから抜け出せないことを意味します。インコグニトまたは完全に異なるブラウザを使用しない限り、別のユーザーアカウントに変更することはできません。
期待: ログアウトをクリックすると、次にログインしようとしたときに、Auth0 SSOページに移動し、必要な操作を実行した後、Discourseフォーラムにリダイレクトされるはずです。
currentUser.destroySession() のセッションとOAuthデータのクリア方法に問題があるようです。
手動でAPI呼び出しを行ってユーザーセッションを破棄することもテストしましたが、結果は同じで改善はありませんでした。
fetch(`https://MY_FORUM.discourse.group/admin/users/USER_ID/log_out`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Api-Key': 'API_KEY',
'Api-Username': 'ADMIN_USERNAME',
},
})
OAuthを使用する際のログアウトの修正/アプローチ方法について、アイデアがあれば共有してください。