Я создаю компонент авторизации для firebase. И нашел много постов о том, как можно создать сервис авторизации, большая часть этого поста была о создании какого-то глобального константного или очень интересного способа - создания плагина vue с методами auth.
Но когда я делаю это сам, я легко создаю модуль Auth в vuex и вызываю действие при создании жизненного цикла app.vue для проверки пользователя и передаю эти данные в хранилище.
Post при создании auth в vue плагине.
И мое решение
import {VuexModule, Module, Mutation, Action} from 'vuex-module-decorators'
import * as firebase from 'firebase';
import { SingUpActionPayload, ResponseError, SingUpMutationPayload} from "./interfaces/singUp";
@Module
export default class Auth extends VuexModule {
singUpData: any;
singUpError: ResponseError = {
code: '',
message: ''
};
@Action({rawError: true})
async singUp (payload: SingUpActionPayload) {
try {
let result = firebase.auth().createUserWithEmailAndPassword(payload.email, payload.password);
await result;
this.context.commit('setCurrentUser', firebase.auth().currentUser);
this.context.commit('setSingUpResult', {type: 'result', result});
} catch (error) {
this.context.commit('setSingUpResult', {type: 'error', error});
}
}
@Mutation
setSingUpResult(payload: any){
if(payload.type === 'result'){
this.singUpData = payload.result;
} else {
this.singUpError = payload.error;
}
}
}
@Module
export default class UserModule extends VuexModule {
currentUser = null;
@Action({commit: 'setCurrentUser'})
takeCurrentUser(){
return firebase.auth().currentUser;
}
@Mutation
setCurrentUser(payload: any){
this.currentUser = payload;
}
}
для маршрутизатора у меня похожая логика, как в посте, просто проверьте пользователя из состояния.
Так что теперь у меня есть вопрос, какой способ быть более хорошим, vue плагин с сервисом аутентификации или модуль vuex?