Added firebase login
This commit is contained in:
@@ -1,16 +1,40 @@
|
|||||||
import Vue from "vue";
|
import Vue from "vue";
|
||||||
import Vuex from "vuex";
|
import Vuex from "vuex";
|
||||||
|
import axios from "axios";
|
||||||
|
|
||||||
Vue.use(Vuex);
|
Vue.use(Vuex);
|
||||||
|
|
||||||
export default new Vuex.Store({
|
export default new Vuex.Store({
|
||||||
state: {
|
state: {
|
||||||
token: "yes",
|
user: undefined,
|
||||||
|
},
|
||||||
|
mutations: {
|
||||||
|
storeUser(state, payload) {
|
||||||
|
state.user = payload;
|
||||||
|
},
|
||||||
|
cleanUserData(state) {
|
||||||
|
state.user = undefined;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
actions: {
|
||||||
|
loginUser({ commit }, auth) {
|
||||||
|
axios.post(
|
||||||
|
"https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key=" + process.env.VUE_APP_FIREBASE_API_KEY,
|
||||||
|
{
|
||||||
|
email: auth.email,
|
||||||
|
password: auth.pass,
|
||||||
|
returnSecureToken: true,
|
||||||
|
}
|
||||||
|
).then((res) => {
|
||||||
|
console.log(res);
|
||||||
|
commit('storeUser', res.data);
|
||||||
|
}).catch((e) => {
|
||||||
|
console.error(e);
|
||||||
|
})
|
||||||
|
},
|
||||||
},
|
},
|
||||||
mutations: {},
|
|
||||||
actions: {},
|
|
||||||
getters: {
|
getters: {
|
||||||
auth: (state) => state.token !== undefined,
|
auth: (state) => state.user !== undefined,
|
||||||
},
|
},
|
||||||
modules: {},
|
modules: {},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,11 +1,84 @@
|
|||||||
<template>
|
<template>
|
||||||
<p>Login</p>
|
<v-row class="fill-height pa-4" align="center">
|
||||||
|
<v-col cols="12" class="pa-0">
|
||||||
|
<v-row no-gutters justify="center">
|
||||||
|
<v-card class="elevation-12" width="500">
|
||||||
|
<v-toolbar color="primary">
|
||||||
|
<v-toolbar-title class="white--text font-weight-bold"
|
||||||
|
>Zaloguj się</v-toolbar-title
|
||||||
|
>
|
||||||
|
</v-toolbar>
|
||||||
|
<v-form v-model="inputValidated" @submit.prevent="loginUser()">
|
||||||
|
<v-card-text class="pb-0">
|
||||||
|
<v-text-field
|
||||||
|
autofocus
|
||||||
|
outlined
|
||||||
|
v-model="email"
|
||||||
|
prepend-icon="mdi-at"
|
||||||
|
:rules="[rules.required, rules.counter(email, 6, 'ów')]"
|
||||||
|
label="E-mail"
|
||||||
|
color="primary"
|
||||||
|
type="text"
|
||||||
|
class="my-2"
|
||||||
|
></v-text-field>
|
||||||
|
<v-text-field
|
||||||
|
outlined
|
||||||
|
v-model="password"
|
||||||
|
prepend-icon="mdi-lock"
|
||||||
|
:append-icon="showPass ? 'mdi-eye' : 'mdi-eye-off'"
|
||||||
|
@click:append="showPass = !showPass"
|
||||||
|
:rules="[rules.required, rules.counter(password, 6, 'ów')]"
|
||||||
|
label="Hasło"
|
||||||
|
color="primary"
|
||||||
|
:type="showPass ? 'text' : 'password'"
|
||||||
|
class="my-2"
|
||||||
|
></v-text-field>
|
||||||
|
</v-card-text>
|
||||||
|
<v-card-actions class="pt-0">
|
||||||
|
<v-spacer></v-spacer>
|
||||||
|
<v-btn
|
||||||
|
:disabled="!inputValidated"
|
||||||
|
color="primary"
|
||||||
|
type="submit"
|
||||||
|
>
|
||||||
|
<span class="font-weight-bold">Zaloguj</span>
|
||||||
|
<v-icon right>mdi-key</v-icon>
|
||||||
|
</v-btn>
|
||||||
|
</v-card-actions>
|
||||||
|
</v-form>
|
||||||
|
</v-card>
|
||||||
|
</v-row>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang='ts'>
|
||||||
import { Component, Vue } from "vue-property-decorator";
|
import Vue from 'vue';
|
||||||
|
import { Component } from 'vue-property-decorator';
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
export default class Login extends Vue {
|
export default class Login extends Vue {
|
||||||
|
private async loginUser() {
|
||||||
|
if (this.$data.inputValidated) {
|
||||||
|
this.$store.dispatch('loginUser', {
|
||||||
|
email: this.$data.email,
|
||||||
|
pass: this.$data.password,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private data() {
|
||||||
|
return {
|
||||||
|
inputValidated: false,
|
||||||
|
email: '',
|
||||||
|
password: '',
|
||||||
|
showPass: false,
|
||||||
|
rules: {
|
||||||
|
required: (value: string) => !!value || 'Pole wymagane',
|
||||||
|
counter: (value: string, num: number, end: string) =>
|
||||||
|
value.length >= num || 'Minimum ' + num + ' znak' + end,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
Reference in New Issue
Block a user