@@ -64,16 +64,15 @@ const formData = ref({
const handleSubmit = async () => {
-
- toast.promise(authStore.login(formData.value), {
+ const promise = authStore.login(formData.value)
+ toast.promise(promise, {
loading: 'Calling API',
- success: (data) => {
- return `Login Sucessfull - ${data?.name}`
+ success: (user) => {
+ router.push('/')
+ return `Login Successful - ${user.name}`
},
- error: (data) => `[API] Error saving game - ${data?.response?.data?.message}`,
+ error: (error) =>
+ error.response?.data?.message
})
-
-
- router.push('/')
}
\ No newline at end of file
diff --git a/frontend/src/stores/api.js b/frontend/src/stores/api.js
index 3920e25..8774bd2 100644
--- a/frontend/src/stores/api.js
+++ b/frontend/src/stores/api.js
@@ -16,12 +16,16 @@ export const useAPIStore = defineStore('api', () => {
},
})
- // AUTH
const postLogin = async (credentials) => {
- const response = await axios.post(`${API_BASE_URL}/login`, credentials)
- token.value = response.data.token
- axios.defaults.headers.common['Authorization'] = `Bearer ${token.value}`
- }
+ const response = await axios.post(`${API_BASE_URL}/login`, credentials)
+
+ if (!response.data.token) throw response
+
+ token.value = response.data.token
+ axios.defaults.headers.common['Authorization'] = `Bearer ${token.value}`
+
+ return response
+}
const postLogout = async () => {
await axios.post(`${API_BASE_URL}/logout`)
token.value = undefined
diff --git a/frontend/src/stores/auth.js b/frontend/src/stores/auth.js
index a2f86ee..43c8434 100644
--- a/frontend/src/stores/auth.js
+++ b/frontend/src/stores/auth.js
@@ -6,31 +6,51 @@ export const useAuthStore = defineStore('auth', () => {
const apiStore = useAPIStore()
const currentUser = ref(undefined)
+ const token = ref(localStorage.getItem('token') || null)
const isLoggedIn = computed(() => {
- return currentUser.value !== undefined
+ return currentUser.value !== undefined && token.value !== null
})
const currentUserID = computed(() => {
return currentUser.value?.id
})
+ const setToken = (jwtToken) => {
+ token.value = jwtToken
+ if (jwtToken) {
+ localStorage.setItem('token', jwtToken)
+ } else {
+ localStorage.removeItem('token')
+ }
+ }
+
+ const getToken = () => {
+ return token.value
+ }
+
const login = async (credentials) => {
- await apiStore.postLogin(credentials)
- const response = await apiStore.getAuthUser()
- currentUser.value = response.data
- return response.data
+ const loginResp = await apiStore.postLogin(credentials)
+ const userResp = await apiStore.getAuthUser()
+ const jwtToken = loginResp.data.token
+ setToken(jwtToken)
+ currentUser.value = userResp.data
+ return userResp.data
}
const logout = async () => {
await apiStore.postLogout()
currentUser.value = undefined
+ setToken(null)
}
return {
currentUser,
isLoggedIn,
currentUserID,
+ token,
+ setToken,
+ getToken,
login,
logout,
}
diff --git a/frontend/src/stores/socket.js b/frontend/src/stores/socket.js
index 0af311c..b762d59 100644
--- a/frontend/src/stores/socket.js
+++ b/frontend/src/stores/socket.js
@@ -5,15 +5,20 @@ export const useSocketStore = defineStore('socket', () => {
const socket = inject('socket')
const handleConnection = () => {
- socket.on('connect', () => {
- console.log(`[Socket] Connected -- ${socket.id}`)
- })
- socket.on('disconnect', () => {
- console.log(`[Socket] Disconnected -- ${socket.id}`)
- })
+ try {
+ socket.on('connect', () => {
+ console.log(`[Socket] Connected -- ${socket.id}`)
+ })
+ socket.on('disconnect', () => {
+ console.log(`[Socket] Disconnected -- ${socket.id}`)
+ })
+ } catch (error) {
+ console.error('[Socket] Connection error:', error)
+ }
}
return {
handleConnection,
}
+
})