Compare commits

..

5 commits

9 changed files with 100 additions and 8 deletions

View file

@ -35,7 +35,7 @@ module.exports =
message: err message: err
.then (session_id) -> .then (session_id) ->
# # login or resume successful
reply.send reply.send
success: true success: true
message: session_id message: session_id

View file

@ -0,0 +1,36 @@
logger = (require 'logging').default 'logout'
# session storage (volatile data)
session = (require '../../session')
# fftcg.db (persistent data)
fftcgdb = (require '../../db')
module.exports =
url: '/user/logout'
method: 'POST'
schema:
body:
session: type: 'string'
response:
200:
type: 'object'
required: ['success']
properties:
success:
type: 'boolean'
const: true
handler: (request, reply) ->
new Promise (resolve) ->
session.destroy request.body.session ? ""
.then ->
# active session found
logger.debug "OK removed session '#{request.body.session}'"
resolve null
.catch ->
resolve null
.then ->
reply.send
success: true

View file

@ -14,6 +14,8 @@ fastify.route (require "./routes/#{route}") for route in [
'test' 'test'
# log in user # log in user
'user/login' 'user/login'
# log out user
'user/logout'
# register user # register user
'user/register' 'user/register'
] ]

View file

@ -33,6 +33,16 @@ class FFTCGSESSION
logger.info "OK '#{digest}' created" logger.info "OK '#{digest}' created"
resolve digest resolve digest
destroy: (digest) ->
new Promise (resolve, reject) =>
# delete hash immediately
@db.del digest, (err, res) ->
if res == 0
reject null
else
logger.info "OK '#{digest}' deleted"
resolve null
check: (digest) -> check: (digest) ->
new Promise (resolve, reject) => new Promise (resolve, reject) =>
# refresh expiry timer on digest # refresh expiry timer on digest

View file

@ -22,7 +22,7 @@
{{ buttonText }} {{ buttonText }}
</v-btn> </v-btn>
<v-btn color="error" @click="dialog = false"> <v-btn color="error" @click.native="dialog = false">
Cancel Cancel
</v-btn> </v-btn>
</v-card-actions> </v-card-actions>
@ -46,7 +46,7 @@ export default {
methods: { methods: {
validate() { validate() {
if (this.$refs.form.validate()) { if (this.$refs.form.validate()) {
this.$parent.confirm() this.$emit('confirm')
} }
} }
}, },

View file

@ -1,5 +1,5 @@
<template> <template>
<FormDialog buttonText="Login"> <FormDialog buttonText="Login" @confirm="doLogin">
<v-card-title class="headline"> <v-card-title class="headline">
Log In Log In
</v-card-title> </v-card-title>
@ -43,7 +43,7 @@ export default {
}), }),
methods: { methods: {
confirm() { doLogin() {
axios axios
.post('/user/login', { .post('/user/login', {
session: Cookies.get('session'), session: Cookies.get('session'),
@ -56,6 +56,7 @@ export default {
if (response.data.success) { if (response.data.success) {
Cookies.set('session', response.data.message, { expires: 30 }) Cookies.set('session', response.data.message, { expires: 30 })
console.log('cookie', Cookies.get()) console.log('cookie', Cookies.get())
this.$router.push('about')
} }
}) })
} }

View file

@ -1,5 +1,5 @@
<template> <template>
<FormDialog buttonText="Register"> <FormDialog buttonText="Register" @confirm="doRegister">
<v-card-title class="headline"> <v-card-title class="headline">
Register Register
</v-card-title> </v-card-title>
@ -67,7 +67,7 @@ export default {
}, },
methods: { methods: {
confirm() { doRegister() {
axios axios
.post('/user/register', { .post('/user/register', {
session: null, session: null,

View file

@ -7,6 +7,7 @@
</p> </p>
</v-flex> </v-flex>
<p>user session: {{ sessionID }}</p> <p>user session: {{ sessionID }}</p>
<v-btn @click.native="logout">Logout</v-btn>
</v-container> </v-container>
</template> </template>
@ -21,13 +22,36 @@ export default {
sessionID: '' sessionID: ''
}), }),
methods: {
goHome() {
Cookies.remove('session')
this.$router.push({ name: 'home' })
},
logout() {
axios
.post('/user/logout', {
session: Cookies.get('session')
})
.then(response => {
if (response.data.success) {
this.goHome()
}
})
}
},
mounted() { mounted() {
axios axios
.post('/user/login', { .post('/user/login', {
session: Cookies.get('session') session: Cookies.get('session')
}) })
.then(response => { .then(response => {
this.sessionID = response.data.message if (response.data.success) {
this.sessionID = response.data.message
} else {
this.goHome()
}
}) })
} }
} }

View file

@ -15,19 +15,38 @@
</template> </template>
<script> <script>
import * as Cookies from 'js-cookie'
import axios from '@/plugins/axios'
import LoginForm from '@/components/forms/Login.vue' import LoginForm from '@/components/forms/Login.vue'
import RegisterForm from '@/components/forms/Register.vue' import RegisterForm from '@/components/forms/Register.vue'
export default { export default {
name: 'Home', name: 'Home',
data() { data() {
return { return {
dialog: false dialog: false
} }
}, },
components: { components: {
LoginForm, LoginForm,
RegisterForm RegisterForm
},
mounted() {
if (Cookies.get('session')) {
axios
.post('/user/login', {
session: Cookies.get('session')
})
.then(response => {
if (response.data.success) {
this.$router.push({ name: 'about' })
}
})
}
} }
} }
</script> </script>