0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NextAuth.js&PlanetScaleでSlackログインを実装する

Last updated at Posted at 2023-12-24

Next.jsを使っている場合に、NextAuthを使うことで
簡単にログイン認証を作成することが出来ます。

利用できる認証は、かなり多いです。
ドキュメントのProvidersを見てみてください。

Firebase AuthにはないようなLINEなども完備されています。
ただ、Firebase Authもカスタム認証を実装すれば、もちろん対応可能です。

今回、NextAuth.js&PlanetScaleでSlackの構成でログイン認証を組んだのでメモを残します。

NextAuthでSlackを使うドキュメントはここで
DANGERにかかれている内容が厄介です

まあhttpsを使いましょうということなんですが
localhostでhttpsを使おうとすると色々手間が必要だったのですが
Nxet.jsの機能で気軽にhttpsが使えるようになっていました

公式ドキュメントが AppRouter ではなくて PageRouter っぽかったので
次の記事を参考にさせていただいました

NextAuth自体はDBが必須ではないので
DBと連携するための設定を行う必要がありました。

最終的に [...nextauth]/route.ts はこんな感じになりました。

import SlackProvider from "next-auth/providers/slack";
import NextAuth from "next-auth";
import { PrismaAdapter } from "@auth/prisma-adapter";
import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

const adapter = PrismaAdapter(prisma)

adapter.linkAccount = async ({ provider, type, providerAccountId, access_token, token_type, id_token, userId }) => {
  await prisma.account.create({ data: {
    provider, type, providerAccountId, access_token, token_type, id_token, userId
  } });
  return;
}

export const authOptions = {
  secret: process.env.NEXTAUTH_SECRET,
  adapter: adapter,
  providers: [
    SlackProvider({
      clientId: process.env.SLACK_CLIENT_ID,
      clientSecret: process.env.SLACK_CLIENT_SECRET
    })
  ],
  callbacks: {
    async session({session, user}) {
      if (session?.user) {
        session.user.id = user.id;
      }
      return session;
    }
  },
};

const handler = NextAuth(authOptions);

export { handler as GET, handler as POST }

何だか、普通にやるとエラーが出てしまうので次の記事を参考に
adapter.linkAccountを書き換えています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?