92
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

10分でできるReact+FirebaseのGoogleAuth

Last updated at Posted at 2018-06-05

やりたいこと

Reactを使って
FirebaseのAuthenticationの
Googleログイン、ログアウトの
ボタンを作る

Firebase Google Authenticationドキュメント

Firebaseの設定

  1. Firebaseの管理画面でAuthenticationでGoogleのログインを有効にする
  2. 後述のReactのFirebaseの設定のためにAPIキー一覧を取得しておく
    • ※最近のバージョン(2018年6月)だと右上の「ウェブ設定」ボタンから

※参考: https://qiita.com/cyokodog@github/items/eeedc5c94477602ec9f3 の記事のgoogleアカウントで認証できるように設定するまで

React環境作成

$ npx create-react-app react-firebase
$ npm install firebase

Firebaseの設定を読み込むjsを作成

$ cd react-firebase
$ vi firebase.js

firebase.js
import firebase from 'firebase/app'
import 'firebase/auth'

const config = {
  apiKey: 'xxxxx',
  authDomain: 'xxxxx.firebaseapp.com',
  databaseURL: 'https://xxxxx.firebaseio.com',
  projectId: 'xxxxx',
  storageBucket: '',
  messagingSenderId: 'xxxxx'
}

firebase.initializeApp(config)

export default firebase

ユーザー情報を持ってない場合はログインボタンを表示、持っている場合はUIDとログアウトボタンを表示する画面の作成

$ vi App.js

App.js
import React, { Component } from 'react'
import firebase from './firebase'
import './App.css'

class App extends Component {
  state = {
    user: null
  }

  componentDidMount() {
    firebase.auth().onAuthStateChanged(user => {
      this.setState({ user })
    })
  }

  login() {
    const provider = new firebase.auth.GoogleAuthProvider()
    firebase.auth().signInWithRedirect(provider)
  }

  logout() {
    firebase.auth().signOut()
  }

  render() {
    return (
      <div className="App">
        <p className="App-intro">
          UID: {this.state.user && this.state.user.uid}
        </p>

        {this.state.user ? (
          <button onClick={this.logout}>Google Logout</button>
        ) : (
          <button onClick={this.login}>Google Login</button>
        )}
      </div>
    )
  }
}

export default App

動作確認

$ npm start

補足:FirebaseのAPIキーを隠しファイル(.env)で管理

package.jsonがある階層に下記のような.envファイルを作成

.env
REACT_APP_FIREBASE_APIKEY=XXXXXXXXXX
REACT_APP_FIREBASE_MESSAGING_SENDER_ID=XXXXXXXXXX

firebase.jsを下記のように修正

firebase.js
import firebase from 'firebase/app'
import 'firebase/auth'

const config = {
  apiKey: process.env.REACT_APP_FIREBASE_APIKEY,
  authDomain: 'xxxxx.firebaseapp.com',
  databaseURL: 'https://xxxxx.firebaseio.com',
  projectId: 'xxxxx',
  storageBucket: '',
  messagingSenderId: process.env.REACT_APP_FIREBASE_MESSAGING_SENDER_ID
}

firebase.initializeApp(config)

export default firebase

実際のサンプルコード

92
88
1

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
92
88

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?