技術系

NextAuthをためしてみる

技術系

こんにちは、なかにしです。

今回はNext.jsの認証ライブラリ、NextAuthを使用してみます!
認証方法はGoogleを使用します。

NextAuthとは

NextAuthは、Next.jsアプリケーションのためのオープンソースの認証ライブラリです。

Oauthに対応しており、
Google・Facebook・LINEなどの各SNS認証を手軽に取り入れることができます。

OAuthについては、以下の記事が分かりやすいです。
https://qiita.com/TakahikoKawasaki/items/e37caf50776e00e733be

使ってみる

インストール~認証用のシークレット発行まで

まずはNext.jsアプリを用意し、NextAuthをインストールします。

npx create-next-app nextauth-practice
npm install next-auth

Google認証の為には、
GoogleのCLIENT_IDと、CLIENT_SECRETが必要です。

▽ これらを発行する為、GCPで新規のプロジェクトを立ち上げます。

▽ 立ち上げたら、ハンバーガーメニュー > APIとサービス > 認証情報を押下します。

▽ 認証情報を作成 > OAuthクライアントIDを押下

▽ OAuthの同意画面を先に作成しろと言われるので、作成します。
この同意画面で、読み取りや書き込み権限や、何かあったときの連絡先などを登録します。
こちらの説明はガイドに沿って実施するのみなので、省略します。

OAuth同意画面の設定を終えたら、先ほどと同様に「認証情報の作成」を押下します。
▽ すると、アプリの種類と名前を決めろと言われるので、設定します。

「作成」を押下すると、クライアントIDとシークレットが発行されますので、控えておきます。

NextAuthの設定

Nextのアプリ内に app > api > auth > […nextauth] > route.ts を作成します。
この […nextauth]はダイナミックルーティングを使っていますね。

route.tsに、もろもろ書いていきます。

import NextAuth from "next-auth/next";
import GoogleProvider from "next-auth/providers/google";

const handler = NextAuth({
  providers: [
    GoogleProvider({
      clientId: process.env.GOOGLE_CLIENT_ID as string,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET as string,
    }),
  ],
  pages: {
    signIn: "/signin",
    error: "/error",
  },
});

export { handler as GET, handler as POST };

providersの場所に何のプロバイダーを使用するかを記述し、IDやシークレットを設定します。

プロバイダーの一覧と、その設定方法はこちらをご参照ください。
(プロバイダーの種類が多すぎてびっくりします)

GOOGLE_CLIENT_ID と GOOGLE_CLIENT_SECRET は環境変数にしてありますので、先ほど取得したものを.envなどの環境変数に設定してあげれば、完成です。

GOOGLE_CLIENT_ID=先ほど取得したID
GOOGLE_CLIENT_SECRET=先ほど取得したシークレット

その後

未認証の場合はリダイレクト、などを行いたい場合はNextのミドルウェアを使用します。
長くなるので、今回は説明を省きます。

また、認証後にユーザ名などの認証情報を取得したい場合は、NextAuthの useSession を使用します。

この useSession の便利な所は、ユーザ名だけでなく、
GoogleやLineで設定しているプロフィール画像も取得できる所ですね。

使う側としても、何かテンションが上がります。

さいごに

いかがでしたでしょうか。

使用してみた感想として、Nextauthの強みは、何と言ってもプロバイダーの種類でしょうか。
「あ、これも対応してるんだ」というのが山盛りで、ワクワクしました。
(ちなみに、Instagramの認証はうまく動作しないようです。最新のissueに上がっていました。)

認証系は準備とユーザ情報の管理が面倒で億劫だったのですが、
useSession内で同じフォーマットで保存してくれているのが本当に助かります。

今後もガツガツ使用していきます!

今回はここまで!
Enjoy Hacking!!

タイトルとURLをコピーしました