Firebase auth входит в систему, но перенаправление на home завершается неудачей после успешного входа в систему (ответ сервера 200)

#javascript #vue.js #firebase-authentication #vue-router

#javascript #vue.js #firebase-аутентификация #vue-маршрутизатор

Вопрос:

Я работаю над приложением vue на основе firebase, которое должно перенаправлять пользователей на домашнюю страницу после успешного входа в систему. Однако я не перенаправлен на домашний просмотр, как это должно быть. Он все еще зависает на странице входа в систему после успешного входа в систему.

this.$router.replace просто не работает, и я понятия не имею, почему.

main.js

 import Vue from "vue";
import firebase from "firebase";
import App from "./App.vue";
import router from "./router";
import swalPlugin from './plugins/VueSweetalert2';

Vue.config.productionTip = false;

let app ='';

firebase.initializeApp( {
  apiKey: "#",
  authDomain: "#",
  databaseURL: "#",
  projectId: "#",
  storageBucket: "#",
  messagingSenderId: "#"
});

Vue.use(swalPlugin);

firebase.auth().onAuthStateChanged(() => {
  if (!app) {
    app = new Vue({
      router,
      render: h => h(App)
    }).$mount("#app");
  }
});
  

router.js

 import firebase from 'firebase';
import Vue from "vue";
import Router from "vue-router";
import Home from "./views/Home.vue";
import Login from "./views/Login.vue";
import SignUp from "./views/SignUp.vue";

Vue.use(Router);

const router = new Router({
  routes: [
    {
      path: '*',
      redirect: '/login'
    },
    {
      path: '/',
      redirect: "/login"
    },
    {
      path: '/login',
      name: 'login',
      component: Login
    },
    {
      path: '/sign-up',
      name: 'signUp',
      component: SignUp
    },
    {
      path: '/home',
      name: 'home',
      component: Home,
      meta: {
        requiresAuth: true
      }
    }
  ]
});

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

  if (requiresAuth amp;amp; !currentUser) next('login');
  else if (!requiresAuth amp;amp; currentUser) next('home');
  else next();

});

export default router;
  

Просмотр Login.vue

 <template>
    <form autocomplete="off">
        <div class="login">
            <h1>Login</h1>
            <p>Sign in to stay updated with the latest news</p>
            <hr>

            <input type="text" placeholder="Email" v-model="email">

            <input type="password" placeholder="Enter Password" v-model="password">

            <hr>
            <button @click="login">Login</button>
            <p>Don't have an account yet? Create one <router-link to="/sign-up">here</router-link></p>

        </div>
    </form>
</template>

<script>
import firebase from 'firebase';
import Swal from 'sweetalert2';


export default {
    name: 'login',
    data() {
        return {
          email: '',
          password: ''
        }
    },
    methods: {
        login: function(){
            firebase.auth().signInWithEmailAndPassword(this.email, this.password).then(
              (user) => {
                this.$router.replace('home');
              },
              (err) => {
                Swal.fire({
                  type: 'error',
                  title: 'An error occurred...',
                  text: err.message
                })
              }
            );
        }
    }
}
</script>
  

Просмотр Home.vue

 <template>
  <div class="home">
    <img alt="Vue logo" src="../assets/logo.png" />
    <HelloWorld msg="Welcome to Your Vue.js App" />
    <button @click="logout">Logout</button>
  </div>
</template>

<script>
import firebase from "firebase";
import HelloWorld from "@/components/HelloWorld.vue";

export default {
  name: "home",
  components: {
    HelloWorld
  },
  methods: {
    logout: function(){
      firebase.auth().signOut().then(() => {
        this.$router.push ({name: 'login'})
      })
    }
  }
};
</script>

  

Ответ №1:

Используйте router.push()

 this.$router.push({name: 'home'});
  

Дайте мне знать, если это сработает!

Комментарии:

1. Я попробовал это.$router.push({name: ‘Регистрация’}), и это работает, после входа в систему он перенаправляет меня на страницу регистрации. Я думаю, что что-то на домашней странице блокирует меня

2. Домашний компонент выглядит нормально. Не могли бы вы, пожалуйста, указать регистратор, когда обещание будет выполнено в функции входа в Login.vue. Что это за регистрация — firebase.auth.CurrentUser

3. Нашел это .. Я изменил const CurrentUser = firebase.auth.CurrentUser на const CurrentUser = firebase.auth().CurrentUser внутри router.js .. Не могу поверить, сколько часов потрачено на это..

4. Отлично! Я также пропустил это.