top_logo

ReactとAuth0でソーシャルログイン

2022年 04月 15日

React の Auth0 用の sdk を用いて Auth0 の Twitter ログインを行いました。

参考サイト

こちらの Auth0 の公式解説をもとに実装しました。


https://auth0.com/docs/quickstart/spa/react/01-login


https://marketplace.auth0.com/integrations/twitter-social-connection


https://auth0.com/docs/libraries/auth0-react

準備

Auth0 への登録、TwitterDevelopper への登録は済んでいる前提でいきます。

Auth0 でフロントエンドのプロジェクト作成

Auth0 の管理画面でアプリケーション作成する。


右上の Create Application をクリック



今回はidol-otaku-project を作成します。


そのほかのプロジェクトはデフォルトで作られているプロジェクトです。


作成したらidol-otaku-project を選択し、そのまま下にスクロールして以下のApplication URIsの項目を埋めます。


Allowed Callback URLs


Allowed Logout URLs


Allowed Web Origins


Allowed Origins (CORS)




以上の 4 項目に


http://localhost:3001(ローカルで使用するポートを設定) を追加


次にプロジェクトの Twitter とのコネクションを有効にしておきます。


Twitter Developper に Auth0 のテナントを登録

Twitter Developper で作成したプロジェクトに auth0 のテナントの URL を入力します。


テナントのドメインは作成したプロジェクトの Settings に書いてあります。


以下のように登録


Website URL:  <テナントのドメイン>

Callback URI : <テナントのドメイン>/login/callback

React アプリケーション作成

任意のディレクトリ作成


mkdir frontend

cd frontend

react アプリケーション作成。


$ yarn create react-app .

必要な環境変数を作成します。


$ touch .env

※ []はいりません。文字列のみ入力してください。


frontend/.env.development
// ローカルで起動時のポート
PORT=3001
// auth0のテナントのドメイン
REACT_APP_AUTH0_DOMAIN=[Domain]
// auth0のフロントエンドアプリケーションのClient ID
REACT_APP_AUTH0_CLIENT_ID=[Client ID]

auth0 用の sdk をインストール


yarn add @auth0/auth0-react

frontend/src/index.js を以下のように編集


frontend/src/index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { Auth0Provider } from '@auth0/auth0-react';

const domain = process.env.REACT_APP_AUTH0_DOMAIN || '';
const clientId = process.env.REACT_APP_AUTH0_CLIENT_ID || '';
const container = document.getElementById('root');
const root = ReactDOM.createRoot(container);

root.render(
  <Auth0Provider
    domain={domain}
    clientId={clientId}
    redirectUri={window.location.origin}
  >
    <App />
  </Auth0Provider>
);

frontend/src/App.js を編集

frontend/src/App.js
import './App.css';
import { useAuth0 } from '@auth0/auth0-react';

function App() {
  const { user, isAuthenticated, loginWithRedirect, logout } = useAuth0();
  // 必要な機能をインポート
  console.log(user);
  return (
    <div className='App'>
      <div style={{ padding: '20px' }}>
        <h2>ログインボタン</h2>
        <button onClick={() => loginWithRedirect()}>ログイン</button>
        <h2>ログアウトボタン</h2>
        <button onClick={() => logout()}>ログアウト</button>
        <h2>ログイン状態</h2>
        {isAuthenticated ? <p>{user.name}</p> : <p> ログアウト</p>}
      </div>
    </div>
  );
}

export default App;

長かったですね!これでログイン処理ができます。


loginWithRedirectでログインができます。logoutでログアウトします。isAuthenticatedにはログインしているか、していないかがbooleanで入っています。


userにはログインしたユーザーの情報が入っています。

ここまで、読んでいただきありがとうございました!


分かりにくい、または間違っているところあれば連絡いただければと思います。

連絡先

何か連絡をしたい際は以下 SNS、メールでお願いいたします。

Twitter:  https://twitter.com/naka_ryo_z

Github:  https://github.com/ryotaro-tenya0727

メール:   ryotaro123110@gmail.com

見出しへのリンク

© 2024, written by Nakayama

Powered by Gatsby