はじめに
FirebaseとReactでの開発で、
今回はGoogleアカウントを使ったログイン機能の実装を行っていきます。(ログインだけです。)
Firebase Authentication
環境
以下の環境で動作を確認しています
$ node -v v11.10.1
"react": "^16.12.0", "firebase": "^7.8.0",
準備
Firebaseプロジェクトの作成
Firebaseプロジェクトの作成は以下の記事にありますので、参考にしていただけますと幸いです。
ログイン方法を指定する
- メニューからAuthenticationを選択
- Authentication画面からログイン方法を選択
- ログインプロバイダからGoogleを選択
- ステータスを有効にする
実装
create-react-app
- create-react-appでReactプロジェクトを作成
npx create-react-app auth-demo
ファイル構成
- ファイル構成は以下の通りです
$ tree │ ├── package-lock.json ├── package.json ├── .env ├── public │ ├── btn_google_signin.png │ ├── favicon.ico │ └── index.html ├── src │ ├── App.css │ ├── App.js │ ├── App.test.js │ ├── components │ │ └── Signin.jsx
Firebase SDK snippet取得する
- FirebaseプロジェクトのSettingsからapiKeyなどを取得
- package.jsonと同じ階層に.envファイルを作成し、そこに取得したapiKeyなどを記述
# Firebase REACT_APP_FIREBASE_API_KEY="×××××××××××××××××××××" REACT_APP_FIREBASE_AUTH_DOMAIN="×××××××.firebaseapp.com" REACT_APP_FIREBASE_DATABASE_URL="https://×××××××.firebaseio.com" REACT_APP_FIREBASE_PROJECT_ID="××××××××××××" REACT_APP_FIREBASE_STORAGE_BUCKET="×××××××××××××××××" REACT_APP_FIREBASE_MESSAGING_SENDER_ID="123456789" REACT_APP_FIREBASE_APP_ID="××××××××××××××××××××××××××××××" REACT_APP_FIREBASE_MEASUREMENT_ID="×××××××××××××"
App.js
- .envファイルからapiKeyなどを読み込む
creare-react-appで作成したプロジェクトは、
process.env.REACT_APP_から始まる変数を読み込みができるようになっています
import React from 'react'; import Signin from './Signin'; import './App.css'; import firebase from 'firebase/app'; import "firebase/auth"; const firebaseConfig = { apiKey: process.env.REACT_APP_FIREBASE_API_KEY, authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN, databaseURL: process.env.REACT_APP_FIREBASE_DATABASE_URL, projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID, storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET, messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID, appId: process.env.REACT_APP_FIREBASE_APP_ID, measurementId: process.env.REACT_APP_FIREBASE_MEASUREMENT_ID, } firebase.initializeApp(firebaseConfig); const App = () => { return ( <div className="App"> <Signin /> </div> ); } export default App;
Signin.jsx
import React from 'react'; import firebase from 'firebase/app'; const Signin = () => { const signInWithGoogle = () => { // Googleプロバイダオブジェクトのインスタンスを作成 const provider = new firebase.auth.GoogleAuthProvider() // ポップアップウィンドウでログインを行う場合はsignInWithPopupを呼び出す firebase.auth().signInWithPopup(provider) .then(user => { alert("success : " + user.user.displayName + "さんでログインしました"); }) .catch(error => { alert(error.message); }); } return ( <div> <div className="login"> <h1>ログイン</h1> </div> <div className="signin_button"> <img src="../btn_google_signin.png" onClick={()=>signInWithGoogle()} alt="google signin"/> </div> </div> ); } export default Signin
実行結果
npm start
- http://localhost:3000 にアクセスする
おわりに
今回は、React + Firebase でGoogleアカウントでのログイン機能だけを実装しました。
次回はルーティングを使って、ログインが成功したらホーム画面に遷移するような機能の実装を行っていきたいと思います。