- VerifiedEmail OK

- Toolbar now save leftDrawerOpen state
- Use LocalStorage to Autologin
This commit is contained in:
Paolo Arena
2019-01-02 18:01:36 +01:00
parent 802f34a893
commit f01a3445f7
11 changed files with 94 additions and 83 deletions

View File

@@ -34,6 +34,9 @@ Thanks to the Quasar Framework and TypeScript !
[![js-standard-style](https://cdn.rawgit.com/standard/standard/master/badge.svg)](https://github.com/standard/standard)
[![Build](https://img.shields.io/circleci/project/github/paoloar77/freeplanet/master.svg?style=for-the-badge)](https://circleci.com/gh/paoloar77/freeplanet/tree/master)
[![Coverage](https://img.shields.io/codecov/c/github/paoloar77/freeplanet/master.svg?style=for-the-badge)](https://codecov.io/gh/paoloar77/freeplanet/branch/master)
</div>
## Features ⚡️

View File

@@ -18,9 +18,9 @@
<script lang="ts">
import Vue from "vue"
import { Component } from 'vue-property-decorator'
import { UserStore } from '@store'
import { EventBus, RootState, storeBuilder, DebugMode } from '@store'
import router from "./router"
import { UserStore } from '@store'
import $ from "jquery"
@@ -46,7 +46,12 @@
console.info(process.env)
}
UserStore.mutations.autologin()
UserStore.actions.autologin()
.then((loginEseguito) => {
if (loginEseguito) {
this.$router.replace('/')
}
})
}
}
</script>

View File

@@ -59,6 +59,8 @@
import drawer from '../layouts/drawer/drawer.vue'
import messagePopover from '../layouts/toolbar/messagePopover/messagePopover.vue'
import { GlobalStore } from '@modules'
@Component({
components: {
drawer,
@@ -76,7 +78,13 @@
{ label: 'Spanish', icon: 'fa-flag-es', value: 'es' },
{ 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() {
return this.$q.i18n.lang

View File

@@ -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>

View File

@@ -7,8 +7,8 @@
<span class="text-white"> {{ Username }} </span>
<hr>
<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"> {{ Email }} </span>
<span class="text-white background-red" v-else> {{$t('reg.non_verificato')}} </span>
<!-- <span class="text-white"> {{ Email }} </span>-->
</div>
<div id="user-actions">
<q-btn round color="primary" icon="person"></q-btn>
@@ -92,6 +92,11 @@
}
</script>
<style scoped>
.background-red{
background-color: red;
padding: 2px;
}
.fixed-bottom {
margin-bottom: 1%;
}

View File

@@ -8,6 +8,7 @@ export interface IGlobalState {
layoutNeeded: boolean
mobileMode: boolean
menuCollapse: boolean
leftDrawerOpen: boolean
posts: IPost[]
}

View File

@@ -1,10 +0,0 @@
<template>
<q-page>Prova pagina</q-page>
</template>
<script>
export default {
// name: 'PageName',
}
</script>

View File

@@ -8,6 +8,7 @@ const state: IGlobalState = {
layoutNeeded: true,
mobileMode: false,
menuCollapse: true,
leftDrawerOpen: true,
posts: []
}
@@ -31,8 +32,13 @@ namespace Mutations {
state.conta = num
}
function setleftDrawerOpen(state: IGlobalState, bool: boolean) {
state.leftDrawerOpen = bool
}
export const mutations = {
setConta: b.commit(setConta)
setConta: b.commit(setConta),
setleftDrawerOpen: b.commit(setleftDrawerOpen)
}
}

View File

@@ -6,7 +6,7 @@ import router from '@router'
import { serv_constants } from '../Modules/serv_constants'
import { rescodes } from '../Modules/rescodes'
import { UserStore } from "@store"
import { GlobalStore, UserStore } from '@store'
const bcrypt = require('bcryptjs')
@@ -109,37 +109,6 @@ namespace Mutations {
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 = {
authUser: b.commit(authUser),
setpassword: b.commit(setpassword),
@@ -147,8 +116,7 @@ namespace Mutations {
setlang: b.commit(setlang),
UpdatePwd: b.commit(UpdatePwd),
setServerCode: b.commit(setServerCode),
clearAuthData: b.commit(clearAuthData),
autologin: b.commit(autologin)
clearAuthData: b.commit(clearAuthData)
}
}
@@ -278,7 +246,10 @@ namespace Actions {
// console.log("RITORNO 2 ");
// mutations.setServerCode(myres);
if (body.code === serv_constants.RIS_CODE_EMAIL_VERIFIED) {
console.log('VERIFICATO !!')
localStorage.setItem('verificato', '1')
} else {
console.log('Risultato di vreg: ', body.code)
}
return { code: body.code, msg: body.msg }
}).catch((err) => {
@@ -353,7 +324,7 @@ namespace Actions {
const now = new Date()
// 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('token', x_auth_token)
localStorage.setItem('userId', iduser)
@@ -438,7 +409,7 @@ namespace Actions {
if (myres.status === 200) {
let iduser = body._id
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) {
console.log('USERNAME = ' + username)
console.log('IDUSER= ' + iduser)
@@ -452,13 +423,14 @@ namespace Actions {
const now = new Date()
// 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('token', x_auth_token)
localStorage.setItem('userId', iduser)
localStorage.setItem('expirationDate', expirationDate.toString())
localStorage.setItem('isLoggedin', String(true))
localStorage.setItem('verificato', String(verifiedEmail))
localStorage.setItem('verificato', Number(verifiedEmail).toString())
// dispatch('storeUser', authData);
// dispatch('setLogoutTimer', myres.data.expiresIn);
@@ -517,6 +489,50 @@ namespace Actions {
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 = {
resetpwd: b.dispatch(resetpwd),
@@ -524,7 +540,8 @@ namespace Actions {
vreg: b.dispatch(vreg),
signup: b.dispatch(signup),
signin: b.dispatch(signin),
logout: b.dispatch(logout)
logout: b.dispatch(logout),
autologin: b.dispatch(autologin)
}
}

View File

@@ -30,6 +30,7 @@
>
<q-input
v-model="signin.password"
type="password"
:before="[{icon: 'vpn_key', handler () {}}]"
@blur="$v.signin.password.$touch"
:error="$v.signin.password.$error"

View File

@@ -51,7 +51,7 @@ export default class Vreg extends Vue {
if (this.verificatook) {
setTimeout(() => {
this.$router.replace('/')
this.$router.replace('/signin')
}, 3000)
}