Compare commits
5 commits
3a0e889626
...
1505667e1e
| Author | SHA1 | Date | |
|---|---|---|---|
| 1505667e1e | |||
| f51796902f | |||
| ed18dce3ea | |||
| 84ec601e2a | |||
| 655f64c193 |
9 changed files with 100 additions and 8 deletions
|
|
@ -35,7 +35,7 @@ module.exports =
|
|||
message: err
|
||||
|
||||
.then (session_id) ->
|
||||
#
|
||||
# login or resume successful
|
||||
reply.send
|
||||
success: true
|
||||
message: session_id
|
||||
|
|
|
|||
36
backend/routes/user/logout.coffee
Normal file
36
backend/routes/user/logout.coffee
Normal 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
|
||||
|
|
@ -14,6 +14,8 @@ fastify.route (require "./routes/#{route}") for route in [
|
|||
'test'
|
||||
# log in user
|
||||
'user/login'
|
||||
# log out user
|
||||
'user/logout'
|
||||
# register user
|
||||
'user/register'
|
||||
]
|
||||
|
|
|
|||
|
|
@ -33,6 +33,16 @@ class FFTCGSESSION
|
|||
logger.info "OK '#{digest}' created"
|
||||
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) ->
|
||||
new Promise (resolve, reject) =>
|
||||
# refresh expiry timer on digest
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
{{ buttonText }}
|
||||
</v-btn>
|
||||
|
||||
<v-btn color="error" @click="dialog = false">
|
||||
<v-btn color="error" @click.native="dialog = false">
|
||||
Cancel
|
||||
</v-btn>
|
||||
</v-card-actions>
|
||||
|
|
@ -46,7 +46,7 @@ export default {
|
|||
methods: {
|
||||
validate() {
|
||||
if (this.$refs.form.validate()) {
|
||||
this.$parent.confirm()
|
||||
this.$emit('confirm')
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<FormDialog buttonText="Login">
|
||||
<FormDialog buttonText="Login" @confirm="doLogin">
|
||||
<v-card-title class="headline">
|
||||
Log In
|
||||
</v-card-title>
|
||||
|
|
@ -43,7 +43,7 @@ export default {
|
|||
}),
|
||||
|
||||
methods: {
|
||||
confirm() {
|
||||
doLogin() {
|
||||
axios
|
||||
.post('/user/login', {
|
||||
session: Cookies.get('session'),
|
||||
|
|
@ -56,6 +56,7 @@ export default {
|
|||
if (response.data.success) {
|
||||
Cookies.set('session', response.data.message, { expires: 30 })
|
||||
console.log('cookie', Cookies.get())
|
||||
this.$router.push('about')
|
||||
}
|
||||
})
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<FormDialog buttonText="Register">
|
||||
<FormDialog buttonText="Register" @confirm="doRegister">
|
||||
<v-card-title class="headline">
|
||||
Register
|
||||
</v-card-title>
|
||||
|
|
@ -67,7 +67,7 @@ export default {
|
|||
},
|
||||
|
||||
methods: {
|
||||
confirm() {
|
||||
doRegister() {
|
||||
axios
|
||||
.post('/user/register', {
|
||||
session: null,
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
</p>
|
||||
</v-flex>
|
||||
<p>user session: {{ sessionID }}</p>
|
||||
<v-btn @click.native="logout">Logout</v-btn>
|
||||
</v-container>
|
||||
</template>
|
||||
|
||||
|
|
@ -21,13 +22,36 @@ export default {
|
|||
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() {
|
||||
axios
|
||||
.post('/user/login', {
|
||||
session: Cookies.get('session')
|
||||
})
|
||||
.then(response => {
|
||||
this.sessionID = response.data.message
|
||||
if (response.data.success) {
|
||||
this.sessionID = response.data.message
|
||||
} else {
|
||||
this.goHome()
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,19 +15,38 @@
|
|||
</template>
|
||||
|
||||
<script>
|
||||
import * as Cookies from 'js-cookie'
|
||||
import axios from '@/plugins/axios'
|
||||
|
||||
import LoginForm from '@/components/forms/Login.vue'
|
||||
import RegisterForm from '@/components/forms/Register.vue'
|
||||
|
||||
export default {
|
||||
name: 'Home',
|
||||
|
||||
data() {
|
||||
return {
|
||||
dialog: false
|
||||
}
|
||||
},
|
||||
|
||||
components: {
|
||||
LoginForm,
|
||||
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>
|
||||
|
|
|
|||
Reference in a new issue