Closed1

NextAuthとZITADELでrefresh_tokenを得る

WalnutsWalnuts

NextAuthでrefresh_tokenを得る方法を調べると、jwt callbackでaccount.refresh_tokenから取得する方法が出てくる

が、Zitadelではデフォルトでとることができなかった

以下解決法

  1. NextAuthのProvidersにおいて、offline_access scopeを追加する
    ZitadelProvider({
      clientId: process.env.ZITADEL_CLIENT_ID,
      clientSecret: process.env.ZITADEL_CLIENT_SECRET,
      issuer: process.env.ZITADEL_URL,
+   authorization: { params: { scope: "openid email profile offline_access" } },
    }),
  1. jwt callbackでaccountからrefresh_tokenを取り出し、tokenに入れる
  callbacks: {
    jwt: async ({
     # <>
      if (account) {
        token.exiresAt = account.expires_at;
+     token.refreshToken = account.refresh_token;
        token.idToken = account.id_token;
      }
  1. ZITADELのプロジェクト/アプリケーションで「トークンを更新する」にチェックを入れる

Done

いやデフォルトでチェック入れといてくださいよ...一時間悩みました

このスクラップは2023/11/11にクローズされました