Store user in VueX, dynamic navbar
This commit is contained in:
parent
47a7339bf5
commit
353134d76f
@ -7,7 +7,7 @@
|
|||||||
<b-collapse id="nav-collapse" is-nav>
|
<b-collapse id="nav-collapse" is-nav>
|
||||||
|
|
||||||
<b-navbar-nav>
|
<b-navbar-nav>
|
||||||
<b-nav-item to="#">Example</b-nav-item>
|
<b-nav-item to="">About</b-nav-item>
|
||||||
</b-navbar-nav>
|
</b-navbar-nav>
|
||||||
|
|
||||||
<!-- Right aligned nav items -->
|
<!-- Right aligned nav items -->
|
||||||
@ -16,10 +16,18 @@
|
|||||||
<b-nav-item-dropdown right>
|
<b-nav-item-dropdown right>
|
||||||
<!-- Using 'button-content' slot -->
|
<!-- Using 'button-content' slot -->
|
||||||
<template v-slot:button-content>
|
<template v-slot:button-content>
|
||||||
<em>User</em>
|
<em v-if="user">{{ user.username }}</em>
|
||||||
|
<em v-else>Account</em>
|
||||||
</template>
|
</template>
|
||||||
<b-dropdown-item href="#">Profile</b-dropdown-item>
|
<div v-if="isLoggedIn">
|
||||||
<b-dropdown-item href="#">Sign Out</b-dropdown-item>
|
<b-dropdown-item to="/profile">Profile</b-dropdown-item>
|
||||||
|
<b-dropdown-item to="/signout">Sign Out</b-dropdown-item>
|
||||||
|
</div>
|
||||||
|
<div v-else>
|
||||||
|
<b-dropdown-item to="/signup">Sign Up</b-dropdown-item>
|
||||||
|
<b-dropdown-item to="/signin">Sign In</b-dropdown-item>
|
||||||
|
</div>
|
||||||
|
|
||||||
</b-nav-item-dropdown>
|
</b-nav-item-dropdown>
|
||||||
|
|
||||||
</b-navbar-nav>
|
</b-navbar-nav>
|
||||||
@ -29,7 +37,13 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import {mapState, mapGetters} from 'vuex'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "Navbar"
|
name: "Navbar",
|
||||||
|
computed: {
|
||||||
|
...mapState(['user']),
|
||||||
|
...mapGetters(['isLoggedIn'])
|
||||||
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
@ -53,7 +53,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
...mapMutations(['setToken', 'setUsername']),
|
...mapMutations(['setToken', 'setUser']),
|
||||||
|
|
||||||
signin() {
|
signin() {
|
||||||
this.error = false
|
this.error = false
|
||||||
@ -65,7 +65,7 @@
|
|||||||
})
|
})
|
||||||
.then(response => {
|
.then(response => {
|
||||||
this.setToken({token: response.data.token})
|
this.setToken({token: response.data.token})
|
||||||
this.setUsername({username: this.form.username})
|
this.setUser({username: this.form.username})
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.log(error)
|
console.log(error)
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import {setToken, clearToken} from '@/jwt'
|
import {setToken, clearToken} from '@/jwt'
|
||||||
|
import {setUser, clearUser} from '@/user'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
setToken: (state, {token}) => {
|
setToken: (state, {token}) => {
|
||||||
@ -9,7 +10,12 @@ export default {
|
|||||||
state.token = null
|
state.token = null
|
||||||
clearToken()
|
clearToken()
|
||||||
},
|
},
|
||||||
setUsername: (state, {username}) => {
|
setUser: (state, {username}) => {
|
||||||
state.username = username
|
state.user = {username}
|
||||||
|
setUser(username)
|
||||||
|
},
|
||||||
|
clearUser: state => {
|
||||||
|
state.user = null
|
||||||
|
clearUser()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
import {getToken} from '@/jwt'
|
import {getToken} from '@/jwt'
|
||||||
|
import {getUser} from '@/user'
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
token: getToken(),
|
token: getToken(),
|
||||||
username: null
|
user: getUser()
|
||||||
}
|
}
|
||||||
19
web/src/user/index.js
Normal file
19
web/src/user/index.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
export function setUser(username) {
|
||||||
|
const user = JSON.stringify({
|
||||||
|
username
|
||||||
|
})
|
||||||
|
localStorage.setItem('user', user)
|
||||||
|
}
|
||||||
|
|
||||||
|
// should only be run at initialization, use VueX store after
|
||||||
|
export function getUser() {
|
||||||
|
const userJson = localStorage.getItem('user')
|
||||||
|
if(!userJson) return null
|
||||||
|
return JSON.parse(userJson)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function clearUser() {
|
||||||
|
localStorage.removeItem('user')
|
||||||
|
}
|
||||||
|
|
||||||
|
export default {setUser, getUser, clearUser}
|
||||||
Loading…
x
Reference in New Issue
Block a user