Аутентификация Twitter с Vue, Vuex и Firebase - PullRequest
0 голосов
/ 06 февраля 2020

Я пытался использовать опцию входа в Twitter для спортивной панели социальных сетей, которую я пытаюсь распустить. Я следил за этим полезным учебным пособием Я удалил компонент HelloWorld и сохранил приложение. vue и основной. js компонент. Ниже мой код. Я получаю сообщение об ошибке «Маршрутизатор не определен». Это может быть просто проблемой маршрутизации. У меня есть и приложение Twitter и аутентификация Firebase правильно. Какие-нибудь мысли? Спасибо

firebaseConfig. js

const firebaseConfig = {
  apiKey: "AIzaSyBaWJ2p6TDNq1WuOVLLtjsJq1xDypaXqdM",
  authDomain: "sportlydatabase.firebaseapp.com",
  databaseURL: "https://sportlydatabase.firebaseio.com",
  projectId: "sportlydatabase",
  storageBucket: "sportlydatabase.appspot.com",
  messagingSenderId: "287835560944",
  appId: "1:287835560944:web:46024fe79c1d870531db35",
  measurementId: "G-48VM19JE6M"
};

знак. vue

 <template>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-6">
                <h3>Sign In with Twitter</h3>
                <button class="btn btn-primary"
                    @click="signIn">
                    <i class="fa fa-twitter"></i>
                    SignIn with Twitter
                </button>
            </div>
        </div>
    </div>
</template>


<script>
export default {
    methods: {
        signIn () {
            this.$store.dispatch('signIn')
        }
    }
}
</script>

<style scoped>
h3 {
    font-weight: 700;
}
button {
    background-color: #1dcaff;
    border: 1px solid  #1dcaff;
}
div button:hover {
    background-color: #00aced;
    border: 1px solid  #00aced;
}
</style>

Дом. vue

    <template>
    <div container-fluid>
        <div>
            <h2>Welcome {{ user.userDetails[0].displayName }}

            </h2>
            <p>You are logged in</p>
            <img :src="user.userDetails[0].photoURL" alt=""
                class="img-circle" height="100px" width="100px"
            >
        </div>
    </div>
</template>


<script>
export default {
    computed: {
       user () {
           return this.$store.getters.user
       }
    }
}
</script>

<style scoped>
h2 {
    font-weight: 700
}
</style>

магазин . js

  import Vue from 'vue'
import Vuex from 'vuex'
import firebase from 'firebase'

Vue.use(Vuex)

export const store = new Vuex.Store({
    state: {
        user: null
    },
    getters: {
        user (state) {
            return state.user
        }
    },
    mutations: {
        SET_USER (state, payload) {
            state.user = payload
        },
        LOGOUT (state, payload) {
            state.user = null
        }
    },
    actions: {
        autoSignIn({ commit }, payload) {
            const newUser = {
                userDetails: payload.providerData
            }
            commit('SET_USER', newUser)
        },
        signIn({ commit }) {
            var provider = new firebase.auth.TwitterAuthProvider();
            firebase.auth().signInWithRedirect(provider);
            firebase.auth().getRedirectResult().then(result => {

                // The signed-in user info.
                var user = result.user;
                commit('SET_USER', user)
            }).catch(error => {
                alert(error)
                return 
            })
        },
        logout({ commit }) {
            firebase.auth().signOut().then(function () {
                commit('LOGOUT')
            }).catch(function (error) {
                alert(error)
                return
            });
        }
    }
})

index. js

  router.beforeEach((to, from, next) => {
  const currentUser = firebase.auth().currentUser;
  const requiresAuth = to.matched.some(record => record.meta.requiresAuth);

  if (requiresAuth && !currentUser) {
    next('/');
  }
  else if (!requiresAuth && currentUser) {
    next('/home');
  }
  else {
    next();
  }
});

export default router

main. js

    // The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue';
import App from './App';


Vue.config.productionTip = false;

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>',
});

1 Ответ

1 голос
/ 06 февраля 2020

Кажется, что вам нужно изменить файл main.js следующим образом:

import Vue from 'vue';
import App from './App';
import router from './router'

См. Файл main.js из вашего учебника: https://github.com/chuks-o/twitterauth/blob/master/src/main.js. Обратите внимание, что мы делаем from './router', потому что файл index.js вашего маршрутизатора находится в каталоге c router.

...