🐙
NextAuth.jsを導入し、GitHubアカウントでログイン可能にする(Pages Router版)
目標
localhost:3000でGitHubアカウントでログイン可能にする
選定理由
Google・GitHubでログインが簡単に実装できそう
email passwordでログインも可能
スター数が多い
更新が活発
実装
公式のGetting Started に沿って進めます
-
npm install next-authまたはyarn add next-authを実行 -
pages/api/auth/[...nextauth].jsを追加
pages/api/auth/[...nextauth].js
import NextAuth from "next-auth"
import GithubProvider from "next-auth/providers/github"
export const authOptions = {
// Configure one or more authentication providers
providers: [
GithubProvider({
clientId: process.env.GITHUB_ID,
clientSecret: process.env.GITHUB_SECRET,
}),
// ...add more providers here
],
}
export default NextAuth(authOptions)
-
pages/_app.jsxに以下を追加
pages/_app.jsx
import { SessionProvider } from "next-auth/react"
export default function App({
Component,
pageProps: { session, ...pageProps },
}) {
return (
<SessionProvider session={session}>
<Component {...pageProps} />
</SessionProvider>
)
}
- signIn signOutボタンを追加したい場所に以下コードを追加
今回はpages/signin.tsxに追加
pages/signin.tsx
import { useSession, signIn, signOut } from "next-auth/react"
export default function Component() {
const { data: session } = useSession()
if (session) {
return (
<>
Signed in as {session.user.name} <br />
<img
src={session.user.image}
alt="icon"
style={{ width: "100px", height: "100px" }}
/>
<button onClick={() => signOut()}>Sign out</button>
</>
)
}
return (
<>
Not signed in <br />
<button onClick={() => signIn()}>Sign in</button>
</>
)
}
これでSign in with GitHubボタンが追加出来ました
しかしクリックしてもTry signing in with a different account.とエラーになります

これは[...nextauth].jsで環境変数を読み込んでるがそれが存在しないため
clientId: process.env.GITHUB_ID,
clientSecret: process.env.GITHUB_SECRET,
なのでGITHUB_IDとGITHUB_SECRETを用意して.env.localに追加します
-
https://github.com/settings/apps にアクセスし
New Github Appボタンをクリックして以下を入力
Github App nameに任意の名前(他のユーザーと被るとエラーになる)
Homepage URL
Callback URL
→callback URLがないとThis GitHub App must be configured with a callback URLエラーが出るので追加必要。Homepage URLと同じでも問題ない)
Webhook Activeのチェックを外す(今回は必要ナシ)


-
Create Github Appボタンをクリック -
Client IDが表示されるので.env.localのGITHUB_IDに追加

-
Generate a new client secretボタンをクリックするとclient secretという長い文字列が表示されるのでコピーして.env.localのGITHUB_SECRETに追加

.env.localは以下のようになります
.env.local
GITHUB_ID=Client IDの値
GITHUB_SECRET=client secretの値
-
Save Changesボタンをクリック -
localhostの方のボタンをクリックすると以下画面になる

Authorizedをクリックすると

ログインできました!
最後に
こんなに簡単にログイン実装できるのは神
間違いなどありましたらコメント頂けると幸いです!
Discussion