この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。データアナリティクス事業本部 サービスソリューション部の北川です。
Auth.js
Auth.jsは、Next.jsなどのプロジェクトに認証機能を実装するライブラリになります。
元々は、NextAuth.jsという名前のライブラリでした。現在は、Next.jsに特化しているわけではなく、他のフレームワークでも使用できるのでAuth.jsに代わっています。そのため、公式サイトの遷移先のGIthubはNext Auth.jsのままだったりします。
今回はNext.jsプロジェクトで、Auth.jsの認証をSetup with OAuthチュートリアルを試してみました。
認証機能の実装
Next.jsプロジェクトの作成
Next.jsプロジェクトを作成します。
npx create next-app sample_authjs --ts
cd sample_authjs
Auth.jsの設定
Auth.jsをインストールします。名前は、next-auth
のままのようです。
yarn add next-auth
pages/api配下に、auth/[...nextauth].jsを作成し、ここで、Google、GitHub、Twitterなどの使用する認証プロバイダーを指定します。
import NextAuth from "next-auth";
import GithubProvider from "next-auth/providers/github";
export default NextAuth({
providers: [
GithubProvider({
clientId: process.env.GITHUB_ID,
clientSecret: process.env.GITHUB_SECRET,
}),
],
});
_app.tsxに移動し、コンポーネントをSessionProvider
でラッピングします。
_app.tsx
import { SessionProvider } from "next-auth/react";
import { AppProps } from "next/app";
const App = ({ Component, pageProps: { session, ...pageProps } }: AppProps) => {
return (
<SessionProvider session={session}>
<Component {...pageProps} />
</SessionProvider>
);
};
export default App;
useSession
から認証情報、状態を取得できます。フックは、SessionProvider内のどこからでも呼び出すことができます。
statusによってログインの有無を識別し、signIn,signOut関数でログイン処理を実装します。
pages/index.tsxを以下のように変更します。signIn関数の引数にプロバイダーを指定して渡すこともできます。
pages/index.tsx
import { useSession, signIn, signOut } from "next-auth/react";
export default function CamperVanPage() {
const { data: session, status } = useSession();
const userEmail = session?.user?.email;
if (status === "loading") {
return <p>Hang on there...</p>;
}
if (status === "authenticated") {
return (
<>
<p>Signed in as {userEmail}</p>
<button onClick={() => signOut()}>Sign out</button>
<img style={{ width: "400px" }} src="https://cdn.pixabay.com/photo/2017/08/11/19/36/vw-2632486_1280.png" />
</>
);
}
return (
<>
<p>Not signed in.</p>
<button onClick={() => signIn("github")}>Sign in</button>
</>
);
}
プロバイダーの設定
次にプロバイダーの設定を行います。チュートリアルに倣って、GitHubプロバイダーを設定します。
Githubにログインして、プロフィールの[Settings]から、[Developer settings]、[OAuth Apps]へと移動します。
右上の[New OAuth App]から、OAuthの情報を登録します。
アプリケーション名などを入力し、callback URLには、以下を指定します。
http://localhost:3000/api/auth/callback/github
遷移したページでClient IDと、Client secretsをそれぞれコピーします。Client secretsは、[Generate a new client Secret]のボタンをクリックすると、表示されます。
プロジェクトに戻り、.env.localファイルを作成し環境変数を追加します。
GITHUB_ID="クライアントID"
GITHUB_SECRET="クライアントシークレット"
ローカル環境を立ち上げ、ログインできるか確認します。
yarn dev
「Sign In」ボタンから、Github認証を行います。
ログインできました。この車がどういう意味なのかは、わかりません...
Github上でも確認してみます。
まとめ
今回は、Auth.jsを使ったプロバイダー認証を試してみました。基本的な機能しか実装していませんが、シンプルで使いやすかったです。今後は、セッション情報の格納なども試したいと思います。
ではまた。