Nuxt SSR auth guard с аутентификацией Firebase - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь внедрить средства проверки подлинности в Nuxt с Firebase Auth, но продолжаю сталкиваться с проблемами.В данный момент я могу войти, но правильная страница не загружается после входа в систему, после входа пользователь должен быть перенаправлен на страницу «/ profile-Overview», но этого не происходит.Когда я перехожу со страницы «Профиль» на другую страницу и затем возвращаюсь, я автоматически перехожу на страницу «Обзор профиля».Таким образом, вход в систему работает, что-то не так с навигацией / обновлением страницы после входа в систему.Кроме того, когда я обновляю страницу, пользователь снова вышел из системы, я бы, кроме пользователя, все еще входил в систему?

Мой код пока:

Страница:

loginGoogle () {
            this.$store.dispatch('signInWithGoogle').then(() => {
                console.log('reload')
                location.reload()
                //window.location.reload(true)
            }).catch((e) => {
                this.title = 'Google login failed'
                this.message =
                    "Something went wrong, please try again later. If this problem keeps happening please contact: jonas@co-house.be " + "Error: " + e.message;
                this.dialog = true;
            })
        },

Промежуточное ПО:

export default function ({ store, redirect, route }) {
    console.log('user state' + store.state.user)
    console.log('route ' + route.name)
    store.state.user != null && route.name == 'profile' ? redirect('/profile-overview') : ''
    store.state.user == null && isAdminRoute(route) ? redirect('/profile') : ''
  }

  function isAdminRoute(route) {
    if (route.matched.some(record => record.path == '/profile-overview')) {
      return true
    }
  }

Плагин:

import {auth} from'@/services/fireInit.js'

export default context => {
  const { store } = context

  return new Promise((resolve, reject) => {
    auth.onAuthStateChanged(user => {
      if (user) {
        return resolve(store.commit('setUser', user))
      }
      return resolve()
    })
  })
}

Store (функция только для входа в систему:

   signInWithGoogle ({ commit }) {
            return new Promise((resolve, reject) => {
                auth.signInWithPopup(GoogleProvider).then((result) => {
                    // This gives you a Google Access Token. You can use it to access the Google API.
                    var token = result.credential.accessToken;
                    // The signed-in user info.
                    var user = result.user;
                    return resolve(store.commit(state.user, result.user))
                    // ...
                }).catch((error) => {
                    // Handle Errors here.
                    var errorCode = error.code;
                    var errorMessage = error.message;
                    // The email of the user's account used.
                    var email = error.email;
                    // The firebase.auth.AuthCredential type that was used.
                    var credential = error.credential;
                    // ...
                })
            })
        },

Кто-нибудь знает, что я могу делать неправильно, или некоторыедокументацию / учебное пособие я мог прочитать?

Заранее спасибо.

1 Ответ

0 голосов
/ 23 сентября 2018

Вам нужно инициализировать вашего пользователя на сервере в nuxtServerInit.Смотрите этот репозиторий на примере реализации https://github.com/davidroyer/nuxt-ssr-firebase-auth.v2

...