🐙
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