feature/profile-page #71
@@ -0,0 +1,37 @@
|
|||||||
|
<template>
|
||||||
|
<div class="profile-page">
|
||||||
|
<h1>My Profile</h1>
|
||||||
|
|
||||||
|
<div v-if="userStore.user">
|
||||||
|
<p><strong>Name:</strong> {{ userStore.user.name }}</p>
|
||||||
|
<p><strong>Email:</strong> {{ userStore.user.email }}</p>
|
||||||
|
<p><strong>Joined:</strong> {{ new Date(userStore.user.created_at).toLocaleString() }}</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div v-else>
|
||||||
|
<p>Loading... <b> 読み込み中 </b></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { useUserStore } from '@/stores/user'
|
||||||
|
import { onMounted } from 'vue'
|
||||||
|
|
||||||
|
const userStore = useUserStore()
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
if (!userStore.user) {
|
||||||
|
userStore.fetchUser()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.profile-page {
|
||||||
|
max-width: 600px;
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
@@ -2,6 +2,7 @@ import HomePage from '@/pages/home/HomePage.vue'
|
|||||||
import LoginPage from '@/pages/login/LoginPage.vue'
|
import LoginPage from '@/pages/login/LoginPage.vue'
|
||||||
import LaravelPage from '@/pages/testing/LaravelPage.vue'
|
import LaravelPage from '@/pages/testing/LaravelPage.vue'
|
||||||
import WebsocketsPage from '@/pages/testing/WebsocketsPage.vue'
|
import WebsocketsPage from '@/pages/testing/WebsocketsPage.vue'
|
||||||
|
import UserPage from '@/pages/user/UserPage.vue'
|
||||||
import { createRouter, createWebHistory } from 'vue-router'
|
import { createRouter, createWebHistory } from 'vue-router'
|
||||||
|
|
||||||
const router = createRouter({
|
const router = createRouter({
|
||||||
@@ -15,6 +16,10 @@ const router = createRouter({
|
|||||||
path: '/login',
|
path: '/login',
|
||||||
component: LoginPage,
|
component: LoginPage,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/user',
|
||||||
|
component: UserPage,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/testing',
|
path: '/testing',
|
||||||
children: [
|
children: [
|
||||||
|
|||||||
@@ -0,0 +1,39 @@
|
|||||||
|
import { defineStore } from 'pinia'
|
||||||
|
import axios from 'axios'
|
||||||
|
|
||||||
|
export const useUserStore = defineStore('user', {
|
||||||
|
state: () => ({
|
||||||
|
user: null,
|
||||||
|
token: localStorage.getItem('token') || null,
|
||||||
|
}),
|
||||||
|
|
||||||
|
actions: {
|
||||||
|
async fetchUser() {
|
||||||
|
if (!this.token) return
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await axios.get('/api/users/me', {
|
||||||
|
headers: {
|
||||||
|
Authorization: `Bearer ${this.token}`
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
this.user = response.data
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Failed to fetch user")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
setToken(token) {
|
||||||
|
this.token = token
|
||||||
|
localStorage.setItem('token', token)
|
||||||
|
},
|
||||||
|
|
||||||
|
logout() {
|
||||||
|
this.token = null
|
||||||
|
this.user = null
|
||||||
|
localStorage.removeItem('token')
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
Reference in New Issue
Block a user