LoginSignup
1
0

NextAuth.jsで実現するLINEログイン

Posted at

NextAuth.jsとは何か、及びそのメリット

NextAuth.jsは、Next.jsアプリケーション向けに設計された認証ライブラリです。サーバーサイドとクライアントサイドの両方で動作し、簡単にセットアップできることが特徴です。OAuth、Email、そしてJWT(JSON Web Tokens)など、多様な認証プロバイダーとの統合をサポートしています。

メリット

・簡単なセットアップ: Next.js環境に特化して設計されているため、数行のコードで認証システムを追加できます。
・柔軟性: 多数のOAuthプロバイダー(Google, Facebook, GitHubなど)に対応しており、カスタムプロバイダーも追加できます。
・セキュリティ: セキュアなJWTベースのセッション管理を提供し、CSRFトークンとHTTP Onlyクッキーを使用してセキュリティを強化します。
ユーザーフレンドリー: サインインとサインアウトのプロセスが簡単で、ユーザーエクスペリエンスを向上させます。
・サーバーレス対応: Vercelなどのサーバーレスプラットフォームで簡単にデプロイできます。

LINEログインとは何か、及びそのメリット

LINEログインは、LINEのアカウントを使用して他のアプリケーションやウェブサービスにログインするためのシステムです。ユーザーはLINEの認証情報を使って、追加の登録プロセスを経ずにサービスを利用できます。

メリット:

・ユーザビリティの向上: 既存のLINEアカウントを使ってログインするため、新規登録の手間が省け、利用開始までのハードルが低くなります。
・セキュリティ: LINEログインはOAuth 2.0プロトコルを使用し、セキュアな認証プロセスを提供します。
・マルチプラットフォーム: スマートフォンアプリだけでなく、ウェブアプリケーションにも容易に統合できます。

実装方法

1. LINE Developersコンソールでのアプリケーション登録

a. LINE Developersサイトにアクセスします。 まず、LINE Developersサイトにアクセスし、アカウントを持っていない場合は作成します。
b. プロバイダーの作成: LINE Developersコンソールで「新規プロバイダー作成」をクリックし、プロバイダー名を入力します。プロバイダーは、アプリケーションの所有者や管理組織を指します。
c. チャネルの作成: プロバイダーを作成した後、「新規チャネル作成」を選択し、LINEログインを選びます。ここでアプリケーション名、アプリケーション説明、プライバシーポリシーURLなどの情報を入力します。

2. 認証情報の取得

チャネルを作成した後、チャネル基本設定ページから以下の認証情報を取得します。

Channel ID: アプリケーションを識別するためのID。
Channel Secret: アプリケーションの秘密鍵。認証時に使用されます。

3. コールバックURLの設定

コールバックURLの設定: アプリケーションやウェブサイトでLINEログインを利用する際、ユーザーがログイン認証後にリダイレクトされるURLを設定します。NextAuth.jsを使用する場合、通常は/api/auth/callback/lineのようなパスになります。

4. LINEログイン機能の統合

NextAuth.jsでLINEログインを統合するには、NextAuthの設定ファイルにLINEプロバイダーを追加します。この際、先ほど取得したChannel IDとChannel Secretを使用します。

// src/pages/api/auth/[...nextauth].ts
import LineProvider from "next-auth/providers/line"
import NextAuth from "next-auth"

export default NextAuth({
  providers: [
    LineProvider({
      clientId: process.env.LINE_CHANNEL_ID,
      clientSecret: process.env.LINE_CHANNEL_SECRET
    })
  ],
  callbacks: {
    session: async ({ session, token }) => {
      if (session?.user) {
        session.user.id = token.sub as string
      }
      return session
    },
  },
  session: {
    strategy: "jwt", 
  },
})

declare module "next-auth" {
  interface Session {
    user: {
      id: string
    }
  }
}

5. 環境変数の設定

// .env.local
LINE_CHANNEL_ID=あなたのチャネルID
LINE_CHANNEL_SECRET=あなたのチャネルシークレット

6. サインイン画面の作成

import { signIn, useSession } from "next-auth/react";

const SignInPage = () => {
  const { data: session } = useSession();

  if (session) {
    return (
      <div>
        <p>Hello, {session.user.name}!</p>
      </div>
    );
  }

  return (
    <div>
      <h1>サインイン</h1>
      <button onClick={() => signIn('line')}>LINEでログイン</button>
    </div>
  );
};

export default SignInPage;
1
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
1
0