BlitzjsでMissing Blitz sessionMiddlewareというエラーが出たときの対処法

11101 ワード

#どのようにしてエラーとなったか
blitzjs公式サイトこちらのサイトを見ながらblitzjsでgoogle認証機能を作成していたのですが、ブラウザにはinternal server errorと表示され、コンソールにはMissing Blitz sessionMiddlewareというエラーが表示され、ハマってしまいました

##関連するコード

//[...auth].ts
import { passportAuth } from "blitz"
import db from "db"
import { Strategy as GoogleStrategy } from "passport-google-oauth20"
export default passportAuth({
  successRedirectUrl: "/",
  errorRedirectUrl: "/",
  strategies: [
    {
      strategy: new GoogleStrategy(
        {
          clientID: process.env.GOOGLE_CLIENT_ID as string,
          clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
          callbackURL:
            process.env.NODE_ENV === "production"
              ? "デプロイ先/api/auth/google/callback"
              : "http://localhost:3004/api/auth/google/callback",
          scope: ["email", "profile"],
        },
        async function (_token, _tokenSecret, profile, done) {
          const email = profile.emails && profile.emails[0]?.value
          const user = await db.user.upsert({
            where: { email },
            create: {
              heart: 1,
              email,
              name: profile.displayName,
            },
            update: { email },
          })
          const publicData = {
            userId: user.id,
            roles: [user.role],
            source: "google",
          }
          done(null, { publicData })
        }
      ),
    },
  ],
})

//blitz.config.ts
import { BlitzConfig, sessionMiddleware, simpleRolesIsAuthorized } from "blitz"

const config: BlitzConfig = {
  middleware: [                       //ここから
    sessionMiddleware({
      cookiePrefix: "streamconnect",
      isAuthorized: simpleRolesIsAuthorized,
    }),
  ],
  distDir: "build",           //ここまで追加
}
module.exports = config

##解決策

こちらを参考にしましたどうやらblitz.config.tsにsessionMiddlewareというものを設定しなければうまく機能しないようです

##感想
エラーの内容は逐一ググり、GitHubのIssueもめんどくさがらずに見る習慣をつけるのが大切であると思いました