- VerifiedEmail OK
- Toolbar now save leftDrawerOpen state - Use LocalStorage to Autologin
This commit is contained in:
@@ -34,6 +34,9 @@ Thanks to the Quasar Framework and TypeScript !
|
|||||||
|
|
||||||
[](https://github.com/standard/standard)
|
[](https://github.com/standard/standard)
|
||||||
|
|
||||||
|
[](https://circleci.com/gh/paoloar77/freeplanet/tree/master)
|
||||||
|
[](https://codecov.io/gh/paoloar77/freeplanet/branch/master)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## Features ⚡️
|
## Features ⚡️
|
||||||
|
|||||||
@@ -18,9 +18,9 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Vue from "vue"
|
import Vue from "vue"
|
||||||
import { Component } from 'vue-property-decorator'
|
import { Component } from 'vue-property-decorator'
|
||||||
|
import { UserStore } from '@store'
|
||||||
import { EventBus, RootState, storeBuilder, DebugMode } from '@store'
|
import { EventBus, RootState, storeBuilder, DebugMode } from '@store'
|
||||||
import router from "./router"
|
import router from "./router"
|
||||||
import { UserStore } from '@store'
|
|
||||||
|
|
||||||
import $ from "jquery"
|
import $ from "jquery"
|
||||||
|
|
||||||
@@ -46,7 +46,12 @@
|
|||||||
console.info(process.env)
|
console.info(process.env)
|
||||||
}
|
}
|
||||||
|
|
||||||
UserStore.mutations.autologin()
|
UserStore.actions.autologin()
|
||||||
|
.then((loginEseguito) => {
|
||||||
|
if (loginEseguito) {
|
||||||
|
this.$router.replace('/')
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -59,6 +59,8 @@
|
|||||||
import drawer from '../layouts/drawer/drawer.vue'
|
import drawer from '../layouts/drawer/drawer.vue'
|
||||||
import messagePopover from '../layouts/toolbar/messagePopover/messagePopover.vue'
|
import messagePopover from '../layouts/toolbar/messagePopover/messagePopover.vue'
|
||||||
|
|
||||||
|
import { GlobalStore } from '@modules'
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
components: {
|
components: {
|
||||||
drawer,
|
drawer,
|
||||||
@@ -76,7 +78,13 @@
|
|||||||
{ label: 'Spanish', icon: 'fa-flag-es', value: 'es' },
|
{ label: 'Spanish', icon: 'fa-flag-es', value: 'es' },
|
||||||
{ label: 'Italian', icon: 'fa-facebook', value: 'it' }
|
{ label: 'Italian', icon: 'fa-facebook', value: 'it' }
|
||||||
]
|
]
|
||||||
public leftDrawerOpen = false;
|
get leftDrawerOpen () {
|
||||||
|
return GlobalStore.state.leftDrawerOpen
|
||||||
|
}
|
||||||
|
set leftDrawerOpen (value) {
|
||||||
|
GlobalStore.state.leftDrawerOpen = value
|
||||||
|
localStorage.setItem('leftDrawerOpen', value.toString())
|
||||||
|
}
|
||||||
|
|
||||||
get lang() {
|
get lang() {
|
||||||
return this.$q.i18n.lang
|
return this.$q.i18n.lang
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
<template lang="pug">
|
|
||||||
q-layout(view="lHh Lpr lFf")
|
|
||||||
q-layout-header
|
|
||||||
q-toolbar.row(color="primary", glossy)
|
|
||||||
q-toolbar-title.col
|
|
||||||
span Quasar TypeScript
|
|
||||||
div(slot="subtitle") Quasar v{{ $q.version }}
|
|
||||||
|
|
||||||
q-btn-dropdown(ref="selectLanguages", v-if="hasMultipleLanguages", icon="language", :label="currentLanguage.code", flat, dense)
|
|
||||||
q-list(link)
|
|
||||||
q-item(v-close-overlay, v-for="(language, index) in availableLanguages", :key="index", @click.native="setLanguage(language.code)")
|
|
||||||
q-item-main
|
|
||||||
q-item-tile(label) {{ language.name }}
|
|
||||||
q-item-side(v-if="language.code === currentLanguage.code", right, icon="done", color="primary")
|
|
||||||
q-page-container
|
|
||||||
router-view
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import { Vue, Component, Mixins } from 'vue-property-decorator'
|
|
||||||
import { Mixin as i18nMixin } from '@/plugins/i18n'
|
|
||||||
|
|
||||||
@Component
|
|
||||||
export default class MainLayout extends Mixins(i18nMixin) {}
|
|
||||||
</script>
|
|
||||||
@@ -7,8 +7,8 @@
|
|||||||
<span class="text-white"> {{ Username }} </span>
|
<span class="text-white"> {{ Username }} </span>
|
||||||
<hr>
|
<hr>
|
||||||
<span class="text-white" v-if="Verificato"> {{$t('reg.verificato')}} </span>
|
<span class="text-white" v-if="Verificato"> {{$t('reg.verificato')}} </span>
|
||||||
<span class="text-white" v-else> {{$t('reg.non_verificato')}} </span>
|
<span class="text-white background-red" v-else> {{$t('reg.non_verificato')}} </span>
|
||||||
<span class="text-white"> {{ Email }} </span>
|
<!-- <span class="text-white"> {{ Email }} </span>-->
|
||||||
</div>
|
</div>
|
||||||
<div id="user-actions">
|
<div id="user-actions">
|
||||||
<q-btn round color="primary" icon="person"></q-btn>
|
<q-btn round color="primary" icon="person"></q-btn>
|
||||||
@@ -92,6 +92,11 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
.background-red{
|
||||||
|
background-color: red;
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
.fixed-bottom {
|
.fixed-bottom {
|
||||||
margin-bottom: 1%;
|
margin-bottom: 1%;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ export interface IGlobalState {
|
|||||||
layoutNeeded: boolean
|
layoutNeeded: boolean
|
||||||
mobileMode: boolean
|
mobileMode: boolean
|
||||||
menuCollapse: boolean
|
menuCollapse: boolean
|
||||||
|
leftDrawerOpen: boolean
|
||||||
posts: IPost[]
|
posts: IPost[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +0,0 @@
|
|||||||
<template>
|
|
||||||
<q-page>Prova pagina</q-page>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
|
|
||||||
export default {
|
|
||||||
// name: 'PageName',
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
@@ -8,6 +8,7 @@ const state: IGlobalState = {
|
|||||||
layoutNeeded: true,
|
layoutNeeded: true,
|
||||||
mobileMode: false,
|
mobileMode: false,
|
||||||
menuCollapse: true,
|
menuCollapse: true,
|
||||||
|
leftDrawerOpen: true,
|
||||||
posts: []
|
posts: []
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -31,8 +32,13 @@ namespace Mutations {
|
|||||||
state.conta = num
|
state.conta = num
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setleftDrawerOpen(state: IGlobalState, bool: boolean) {
|
||||||
|
state.leftDrawerOpen = bool
|
||||||
|
}
|
||||||
|
|
||||||
export const mutations = {
|
export const mutations = {
|
||||||
setConta: b.commit(setConta)
|
setConta: b.commit(setConta),
|
||||||
|
setleftDrawerOpen: b.commit(setleftDrawerOpen)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import router from '@router'
|
|||||||
|
|
||||||
import { serv_constants } from '../Modules/serv_constants'
|
import { serv_constants } from '../Modules/serv_constants'
|
||||||
import { rescodes } from '../Modules/rescodes'
|
import { rescodes } from '../Modules/rescodes'
|
||||||
import { UserStore } from "@store"
|
import { GlobalStore, UserStore } from '@store'
|
||||||
|
|
||||||
const bcrypt = require('bcryptjs')
|
const bcrypt = require('bcryptjs')
|
||||||
|
|
||||||
@@ -109,37 +109,6 @@ namespace Mutations {
|
|||||||
state.verifiedEmail = false
|
state.verifiedEmail = false
|
||||||
}
|
}
|
||||||
|
|
||||||
function autologin (state: IUserState) {
|
|
||||||
// INIT
|
|
||||||
UserStore.mutations.setlang(process.env.LANG_DEFAULT)
|
|
||||||
// ++Todo: Estrai la Lang dal Localstorage
|
|
||||||
const lang = localStorage.getItem('lang')
|
|
||||||
if (lang) {
|
|
||||||
UserStore.mutations.setlang(lang)
|
|
||||||
}
|
|
||||||
|
|
||||||
const token = localStorage.getItem('token')
|
|
||||||
if (!token) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const expirationDateStr = localStorage.getItem('expirationDate')
|
|
||||||
let expirationDate = new Date(String(expirationDateStr))
|
|
||||||
const now = new Date()
|
|
||||||
if (now >= expirationDate) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const userId = Number(localStorage.getItem('userId'))
|
|
||||||
const username = String(localStorage.getItem('username'))
|
|
||||||
const verifiedEmail = localStorage.getItem('verificato') === '1'
|
|
||||||
|
|
||||||
mutations.authUser({
|
|
||||||
username: username,
|
|
||||||
userId: userId,
|
|
||||||
idToken: token,
|
|
||||||
verifiedEmail: verifiedEmail
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export const mutations = {
|
export const mutations = {
|
||||||
authUser: b.commit(authUser),
|
authUser: b.commit(authUser),
|
||||||
setpassword: b.commit(setpassword),
|
setpassword: b.commit(setpassword),
|
||||||
@@ -147,8 +116,7 @@ namespace Mutations {
|
|||||||
setlang: b.commit(setlang),
|
setlang: b.commit(setlang),
|
||||||
UpdatePwd: b.commit(UpdatePwd),
|
UpdatePwd: b.commit(UpdatePwd),
|
||||||
setServerCode: b.commit(setServerCode),
|
setServerCode: b.commit(setServerCode),
|
||||||
clearAuthData: b.commit(clearAuthData),
|
clearAuthData: b.commit(clearAuthData)
|
||||||
autologin: b.commit(autologin)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -278,7 +246,10 @@ namespace Actions {
|
|||||||
// console.log("RITORNO 2 ");
|
// console.log("RITORNO 2 ");
|
||||||
// mutations.setServerCode(myres);
|
// mutations.setServerCode(myres);
|
||||||
if (body.code === serv_constants.RIS_CODE_EMAIL_VERIFIED) {
|
if (body.code === serv_constants.RIS_CODE_EMAIL_VERIFIED) {
|
||||||
|
console.log('VERIFICATO !!')
|
||||||
localStorage.setItem('verificato', '1')
|
localStorage.setItem('verificato', '1')
|
||||||
|
} else {
|
||||||
|
console.log('Risultato di vreg: ', body.code)
|
||||||
}
|
}
|
||||||
return { code: body.code, msg: body.msg }
|
return { code: body.code, msg: body.msg }
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
@@ -353,7 +324,7 @@ namespace Actions {
|
|||||||
|
|
||||||
const now = new Date()
|
const now = new Date()
|
||||||
// const expirationDate = new Date(now.getTime() + myres.data.expiresIn * 1000);
|
// const expirationDate = new Date(now.getTime() + myres.data.expiresIn * 1000);
|
||||||
const expirationDate = new Date(now.getTime() + 1000)
|
const expirationDate = new Date(now.getTime() * 1000)
|
||||||
localStorage.setItem('username', username)
|
localStorage.setItem('username', username)
|
||||||
localStorage.setItem('token', x_auth_token)
|
localStorage.setItem('token', x_auth_token)
|
||||||
localStorage.setItem('userId', iduser)
|
localStorage.setItem('userId', iduser)
|
||||||
@@ -438,7 +409,7 @@ namespace Actions {
|
|||||||
if (myres.status === 200) {
|
if (myres.status === 200) {
|
||||||
let iduser = body._id
|
let iduser = body._id
|
||||||
let username = authData.username
|
let username = authData.username
|
||||||
let verifiedEmail = body.verifiedEmail === 'true' || body.verifiedEmail === true
|
let verifiedEmail = body.verified_email === 'true' || body.verified_email === true
|
||||||
if (process.env.DEV) {
|
if (process.env.DEV) {
|
||||||
console.log('USERNAME = ' + username)
|
console.log('USERNAME = ' + username)
|
||||||
console.log('IDUSER= ' + iduser)
|
console.log('IDUSER= ' + iduser)
|
||||||
@@ -452,13 +423,14 @@ namespace Actions {
|
|||||||
|
|
||||||
const now = new Date()
|
const now = new Date()
|
||||||
// const expirationDate = new Date(now.getTime() + myres.data.expiresIn * 1000);
|
// const expirationDate = new Date(now.getTime() + myres.data.expiresIn * 1000);
|
||||||
const expirationDate = new Date(now.getTime() + 1000)
|
const expirationDate = new Date(now.getTime() * 1000)
|
||||||
localStorage.setItem('username', username)
|
localStorage.setItem('username', username)
|
||||||
localStorage.setItem('token', x_auth_token)
|
localStorage.setItem('token', x_auth_token)
|
||||||
localStorage.setItem('userId', iduser)
|
localStorage.setItem('userId', iduser)
|
||||||
localStorage.setItem('expirationDate', expirationDate.toString())
|
localStorage.setItem('expirationDate', expirationDate.toString())
|
||||||
localStorage.setItem('isLoggedin', String(true))
|
localStorage.setItem('isLoggedin', String(true))
|
||||||
localStorage.setItem('verificato', String(verifiedEmail))
|
localStorage.setItem('verificato', Number(verifiedEmail).toString())
|
||||||
|
|
||||||
|
|
||||||
// dispatch('storeUser', authData);
|
// dispatch('storeUser', authData);
|
||||||
// dispatch('setLogoutTimer', myres.data.expiresIn);
|
// dispatch('setLogoutTimer', myres.data.expiresIn);
|
||||||
@@ -517,6 +489,50 @@ namespace Actions {
|
|||||||
router.push('/signin')
|
router.push('/signin')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setGlobal() {
|
||||||
|
GlobalStore.mutations.setleftDrawerOpen(localStorage.getItem('leftDrawerOpen') === 'true')
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
async function autologin (context) {
|
||||||
|
try {
|
||||||
|
// INIT
|
||||||
|
UserStore.mutations.setlang(process.env.LANG_DEFAULT)
|
||||||
|
// ++Todo: Estrai la Lang dal Localstorage
|
||||||
|
const lang = localStorage.getItem('lang')
|
||||||
|
if (lang) {
|
||||||
|
UserStore.mutations.setlang(lang)
|
||||||
|
}
|
||||||
|
|
||||||
|
const token = localStorage.getItem('token')
|
||||||
|
if (!token) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
const expirationDateStr = localStorage.getItem('expirationDate')
|
||||||
|
let expirationDate = new Date(String(expirationDateStr))
|
||||||
|
const now = new Date()
|
||||||
|
if (now >= expirationDate) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
const userId = Number(localStorage.getItem('userId'))
|
||||||
|
const username = String(localStorage.getItem('username'))
|
||||||
|
const verifiedEmail = localStorage.getItem('verificato') === '1'
|
||||||
|
|
||||||
|
setGlobal()
|
||||||
|
|
||||||
|
Mutations.mutations.authUser({
|
||||||
|
username: username,
|
||||||
|
userId: userId,
|
||||||
|
idToken: token,
|
||||||
|
verifiedEmail: verifiedEmail
|
||||||
|
})
|
||||||
|
return true
|
||||||
|
} catch (e) {
|
||||||
|
console.error('ERR autologin ', e.message)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export const actions = {
|
export const actions = {
|
||||||
resetpwd: b.dispatch(resetpwd),
|
resetpwd: b.dispatch(resetpwd),
|
||||||
@@ -524,7 +540,8 @@ namespace Actions {
|
|||||||
vreg: b.dispatch(vreg),
|
vreg: b.dispatch(vreg),
|
||||||
signup: b.dispatch(signup),
|
signup: b.dispatch(signup),
|
||||||
signin: b.dispatch(signin),
|
signin: b.dispatch(signin),
|
||||||
logout: b.dispatch(logout)
|
logout: b.dispatch(logout),
|
||||||
|
autologin: b.dispatch(autologin)
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
>
|
>
|
||||||
<q-input
|
<q-input
|
||||||
v-model="signin.password"
|
v-model="signin.password"
|
||||||
|
type="password"
|
||||||
:before="[{icon: 'vpn_key', handler () {}}]"
|
:before="[{icon: 'vpn_key', handler () {}}]"
|
||||||
@blur="$v.signin.password.$touch"
|
@blur="$v.signin.password.$touch"
|
||||||
:error="$v.signin.password.$error"
|
:error="$v.signin.password.$error"
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ export default class Vreg extends Vue {
|
|||||||
|
|
||||||
if (this.verificatook) {
|
if (this.verificatook) {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
this.$router.replace('/')
|
this.$router.replace('/signin')
|
||||||
}, 3000)
|
}, 3000)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user