rkdora's Blog

Vue.js + Firebase + GitHub認証

JS-proを始めて1週間のVue.js初心者です。

今回は、タイトルにあるように「Vue.js + Firebase + GitHub認証」WEBアプリを実装していきます。

開発環境は、Ubuntu18.04LTS です。

流れは以下の通りです。

さあ、やっていきましょう。

Vue のプロジェクトを作成

  1. npm install -g @vue/cli
  2. vue create github-auth ⚠ここでは、アプリ名をgithub-authにしています。
  3. cd github-auth/
  4. npm run serve ブラウザからlocalhost:8080 にアクセスして、この画面が出てくれば成功 f:id:rkdora:20200506130128p:plain

Firebaseのプロジェクトを作成

  1. Firebase コンソールに移動
  2. プロジェクトを作成
    f:id:rkdora:20200506130520p:plain
    プロジェクトを追加
  3. ウェブアプリを追加
    f:id:rkdora:20200506135049p:plain
    ウェブアプリを追加

FirebaseとGithubを連携

  1. Authentication

    f:id:rkdora:20200506131225p:plain
    Authentication

    赤線のURLをコピーしておく f:id:rkdora:20200506133542p:plain

  2. Sign-in method
    GitHubを選択し、「有効」にする

    f:id:rkdora:20200506131741p:plain
    Sign-in method

  3. アプリを登録する
    Application name : my-github-auth(アプリ名)
    Homepage URL : ペーストし、末尾が.firebaseapp.com/になるようにする
    Authorization callback URL : ペーストする
    f:id:rkdora:20200506132054p:plain

  4. クライアントIDとクライアントシークレットをFirebase側に貼り付け
    赤部分 f:id:rkdora:20200506134003p:plain f:id:rkdora:20200506134123p:plain

  5. GitHubが有効になれば成功 f:id:rkdora:20200506134232p:plain

Vue のソースコードをいい感じに

  1. Firebaseプロジェクトの設定を開く

    f:id:rkdora:20200506135502p:plain
    設定を開く

  2. Firebase側の情報をコピー

    f:id:rkdora:20200506141855p:plain
    赤の部分

  3. src/main.js に貼り付け

import firebase from 'firebase'
import Vue from 'vue'
import App from './App.vue'

Vue.config.productionTip = false

// Your web app's Firebase configuration
var firebaseConfig = {
  apiKey: "見せられないよ",
  authDomain: "github-auth-6d6da.firebaseapp.com",
  databaseURL: "https://github-auth-6d6da.firebaseio.com",
  projectId: "github-auth-6d6da",
  storageBucket: "github-auth-6d6da.appspot.com",
  messagingSenderId: "見せられないよ",
  appId: "見せられないよ"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);

new Vue({
  render: h => h(App),
}).$mount('#app')
  1. src/App.vue
<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <GithubAuth msg="Welcome to Github-Auth"/>
  </div>
</template>

<script>
import GithubAuth from './components/GithubAuth.vue'

export default {
  name: 'App',
  components: {
    GithubAuth
  }
}
</script>

<style>
#app {
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;
}
</style>
  1. src/components/GithubAuth.vue
<template>
  <div class="github-auth">
    <h1>{{ msg }}</h1>
    <div v-if="user.uid" key="login">
      <img :src="user.photoURL"/><br>
      [{{ user.displayName }}]<br>
      <button type="button" @click="doLogout">ログアウト</button>
    </div>
    <!-- 未ログイン時にはログインボタンを表示 -->
    <div v-else key="logout">
      <button type="button" @click="doLogin">ログイン</button>
    </div>
  </div>
</template>

<script>
import firebase from 'firebase'
export default {
  name: 'GithubAuth',
  props: {
    msg: String
  },
  data() {
    return {
      user: {}
    }
  },
  created() {
    firebase.auth().onAuthStateChanged(user => {
      this.user = user ? user : {}
    })
  },
  methods: {
    doLogin() {
      console.log("doLogin");
      const provider = new firebase.auth.GithubAuthProvider();
      firebase.auth().signInWithPopup(provider)
    },
    doLogout() {
      console.log("doLogout");
      firebase.auth().signOut()
    }
  }
}
</script>

完成

  1. npm install firebase
  2. npm run serve
  3. ブラウザでlocalhost:8080にアクセス f:id:rkdora:20200506144723p:plainf:id:rkdora:20200506144729p:plainf:id:rkdora:20200506144733p:plain

参考文献

Vue.js+Firebaseで認証付きチャット | 基礎から学ぶ Vue.js

Firebase のユーザーを管理する

JavaScript による GitHub を使用した認証  |  Firebase

ソースコード

github.com