# Firebase 登入系統 參考文章:[點這邊](https://medium.com/@anas.mammeri/vue-2-firebase-how-to-build-a-vue-app-with-firebase-authentication-system-in-15-minutes-fdce6f289c3c) ## Install & Import Firebase ```javascript npm install ——save firebase ``` > 創建 firebase.js (放置登入按鈕的地方)[color=black] :baby_chick: 首先一樣需要 **import firebase** ```javascript import firebase from 'firebase' require('firebase/firestore') var firebaseConfig = { apiKey: "AIzaSyBKivYrmxjj_8QjCsmoiUJECAGITOREot4", authDomain: "tianyuan-ae158.firebaseapp.com", databaseURL: "https://tianyuan-ae158.firebaseio.com", projectId: "tianyuan-ae158", storageBucket: "tianyuan-ae158.appspot.com", messagingSenderId: "266027599129", appId: "1:266027599129:web:53341b5e076f5807ec3188" }; // Initialize & export Firebase export const fb = firebase.initializeApp(firebaseConfig); export const db = firebase.firestore(); ``` > 進入 main.js、Login.vue[color=blue] :baby_chick: **import firebase** ```javascript import { fb } from './firebase.js' ``` ## 綁定輸入資料v-model > 進入 Login.vue[color=coral] > :baby_chick: 將每個input綁定v-model ```vue= <md-tabs md-dynamic-height> <md-tab md-label="LOGIN"> <input v-model="loginEmail" type="email" placeholder="Email"> <input v-model="loginPwd" type="password" placeholder="Passwrod"> <button @click="login" @keyup.enter="login">登入</button> </md-tab> <md-tab md-label="SIGNUP"> <input v-model="email" type="email" placeholder="Email"> <input v-model="password" type="password" placeholder="Passwrod"> <button @click="signUp" @keyup.enter="signUp">Sign up</button> </md-tab> </md-tabs> ``` :baby_chick: 將綁定的v-model對應到data(){} ```javascript= data(){ return { showDialog: false, email: '', password: '', loginEmail:'', loginPwd:'', } ``` ## title > 進入 Login.vue[color=coral] :baby_chick: **fb.auth().signInWithEmailAndPassword(email, pwd)** 處理登入,並將其中的 email 和 pwd 替換成 data 中的 **v-model** 綁定資料。 :baby_chick: **this.$router.replace('admin')** 設定在登入後自動跳轉至後台 :baby_chick: **this.showDialog = false**在登入後關閉此登入視窗 ```javascript= methods:{ login(){ fb.auth().signInWithEmailAndPassword(this.loginEmail, this.loginPwd) .then( (user) => { alert('登入成功') this.$router.replace('admin') this.showDialog = false }, (err) => { alert(err.message) } ) }, signUp(){ fb.auth().createUserWithEmailAndPassword(this.email, this.password) .then( (user) => { alert('成功創好帳號囉') this.showDialog = false this.$router.replace('admin') }, (err) => { alert(err.message) } )} } ``` ## Firebase User Auth Guard > 進入 router.js[color=pink] > :baby_chick: 在admin path的下方接續輸入 meta, beforeEnter (to,from, next) ```javascript= meta : { requiresAuth: true }, beforeEnter: (to,from, next) => { const requiresAuth = to.matched.some(x => x.meta.requiresAuth) const currentUser = fb.auth().currentUser if(requiresAuth && !currentUser){ next('/') } else if (currentUser && requiresAuth){ next() } else { next() } } ``` > 進入 main.js[color=pink] > :baby_chick: onAuthStateChanged ```javascript= let app = ''; fb.auth().onAuthStateChanged(function(user){ if(!app){ new Vue({ router, store, render: h => h(App) }).$mount('#app') } }) ```