Skip to content

Commit

Permalink
(frontend) redirect once user is logged to the homepage
Browse files Browse the repository at this point in the history
  • Loading branch information
Pierre-Alexandre35 committed Jun 29, 2024
1 parent b17ca32 commit 78288f4
Show file tree
Hide file tree
Showing 6 changed files with 146 additions and 147 deletions.
55 changes: 27 additions & 28 deletions travian/frontend/src/components/Home.vue
Original file line number Diff line number Diff line change
@@ -1,31 +1,30 @@
<!-- Home.vue -->

<template>
<div class="container">
<h1>Welcome to the Home Page</h1>
<p>You are logged in as {{ userEmail }}</p>
</div>
</template>

<script lang="ts">
import { defineComponent, computed } from 'vue';
import { useAuthStore } from '@/store/auth';

export default defineComponent({
name: 'Home',
setup() {
const authStore = useAuthStore();

const userEmail = computed(() => authStore.userEmail);

return {
userEmail,
};
}
});
</script>

<style scoped>
/* Add your scoped styles for Home */
</style>

<div class="container">
<h1>Welcome to the Home Page</h1>
<p>You are logged in as {{ username }}</p>
</div>
</template>

<script lang="ts">
import { defineComponent, computed } from 'vue';
import { useAuthStore } from '@/store/auth';

export default defineComponent({
name: 'Home',
setup() {
const authStore = useAuthStore();

const username = computed(() => authStore.username);

return {
username,
};
}
});
</script>

<style scoped>
/* Add your scoped styles for Home */
</style>
103 changes: 52 additions & 51 deletions travian/frontend/src/components/Login.vue
Original file line number Diff line number Diff line change
@@ -1,54 +1,55 @@
<!-- Login.vue -->

<template>
<div class="container">
<h1>Login</h1>
<form @submit.prevent="login">
<div>
<label>Username:</label> <!-- Change label to Username -->
<input type="text" v-model="username" required> <!-- Change type to text and v-model to username -->
</div>
<div>
<label>Password:</label>
<input type="password" v-model="password" required>
</div>
<button type="submit">Login</button>
</form>
</div>
</template>

<script lang="ts">
import { ref } from 'vue';
import { useAuthStore } from '@/store/auth';

export default {
name: 'Login',
setup() {
const authStore = useAuthStore();
const username = ref('');
const password = ref('');

const login = async () => {
try {
await authStore.login(username.value, password.value);
// Redirect to home page or wherever needed after successful login
// Example: router.push('/home');
} catch (error) {
console.error(error);
// Handle login error
}
};

return {
username,
password,
login,
};
}
};
</script>

<style scoped>
/* Add your styles for Login */
</style>

<div class="container">
<h1>Login</h1>
<form @submit.prevent="login">
<div>
<label>Username:</label>
<input type="text" v-model="username" required>
</div>
<div>
<label>Password:</label>
<input type="password" v-model="password" required>
</div>
<button type="submit">Login</button>
</form>
</div>
</template>

<script lang="ts">
import { ref } from 'vue';
import { useAuthStore } from '@/store/auth';
import { useRouter } from 'vue-router';

export default {
name: 'Login',
setup() {
const authStore = useAuthStore();
const router = useRouter();
const username = ref('');
const password = ref('');

const login = async () => {
try {
await authStore.login(username.value, password.value);
// Redirect to home page after successful login
router.push('/home');
} catch (error) {
console.error(error);
// Handle login error
}
};

return {
username,
password,
login,
};
}
};
</script>

<style scoped>
/* Add your styles for Login */
</style>
69 changes: 34 additions & 35 deletions travian/frontend/src/components/Navbar.vue
Original file line number Diff line number Diff line change
@@ -1,39 +1,38 @@
<!-- Navbar.vue -->

<template>
<nav>
<div class="container">
<div class="brand">
My App
</div>
<div v-if="isLoggedIn" class="user-info">
Logged in as {{ userEmail }}
</div>
<nav>
<div class="container">
<div class="brand">
My App
</div>
</nav>
</template>

<script lang="ts">
import { defineComponent, computed } from 'vue';
import { useAuthStore } from '@/store/auth';

export default defineComponent({
name: 'Navbar',
setup() {
const authStore = useAuthStore();

const isLoggedIn = computed(() => authStore.isLoggedIn);
const userEmail = computed(() => authStore.userEmail);

return {
isLoggedIn,
userEmail,
};
}
});
</script>

<style scoped>
/* Add your scoped styles for Navbar */
</style>

<div v-if="isLoggedIn" class="user-info">
Logged in as {{ username }}
</div>
</div>
</nav>
</template>

<script lang="ts">
import { defineComponent, computed } from 'vue';
import { useAuthStore } from '@/store/auth';

export default defineComponent({
name: 'Navbar',
setup() {
const authStore = useAuthStore();

const isLoggedIn = computed(() => authStore.isLoggedIn);
const username = computed(() => authStore.username);

return {
isLoggedIn,
username,
};
}
});
</script>

<style scoped>
/* Add your scoped styles for Navbar */
</style>
6 changes: 3 additions & 3 deletions travian/frontend/src/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';
import LoginPage from '@/views/LoginPage.vue';
import HomePage from '@/views/HomePage.vue';
import { useAuthStore } from '@/store/auth';

const routes: Array<RouteRecordRaw> = [
{ path: '/', component: LoginPage },
Expand All @@ -14,11 +15,10 @@ const router = createRouter({
routes,
});

// Check authentication status before each route navigation
router.beforeEach((to, from, next) => {
const isAuthenticated = true; // Replace with your actual authentication check
const authStore = useAuthStore();

if (to.matched.some(record => record.meta.requiresAuth) && !isAuthenticated) {
if (to.matched.some(record => record.meta.requiresAuth) && !authStore.isLoggedIn) {
next('/');
} else {
next();
Expand Down
16 changes: 4 additions & 12 deletions travian/frontend/src/store/auth.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
// src/store/auth.ts
// auth.ts

import { defineStore } from 'pinia';
import apiClient from '@/api/api';
import { useRouter } from 'vue-router';

interface AuthState {
isLoggedIn: boolean;
Expand All @@ -21,29 +22,20 @@ export const useAuthStore = defineStore('auth', {
password: password
});

// Assuming your backend returns the username in the response
const { access_token, username: responseUsername } = response.data;
const { access_token, username: returnedUsername } = response.data;

// Save username and set logged in status
this.isLoggedIn = true;
this.username = responseUsername;
this.username = returnedUsername;

// Save token to localStorage or sessionStorage if needed
localStorage.setItem('access_token', access_token);

// You may want to redirect here after successful login
// Example: router.push('/home');
} catch (error) {
console.error('Login failed:', error);
throw new Error('Login failed');
}
},
logout(this: any): void {
// Clear user data and set logged out status
this.isLoggedIn = false;
this.username = '';

// Clear token from localStorage or sessionStorage if used
localStorage.removeItem('access_token');
}
}
Expand Down
44 changes: 26 additions & 18 deletions travian/frontend/src/views/HomePage.vue
Original file line number Diff line number Diff line change
@@ -1,21 +1,29 @@
<!-- views/HomePage.vue -->

<template>
<div class="container">
<h1>Home Page</h1>
<p>Welcome to the Home Page</p>
</div>
</template>

<script lang="ts">
import { defineComponent } from 'vue';

export default defineComponent({
name: 'HomePage',
});
</script>

<style scoped>
/* Add scoped styles for HomePage */
</style>

<div class="container">
<h1>Home Page</h1>
<p>Welcome to the Home Page, {{ username }}</p>
</div>
</template>

<script lang="ts">
import { defineComponent, computed } from 'vue';
import { useAuthStore } from '@/store/auth';

export default defineComponent({
name: 'HomePage',
setup() {
const authStore = useAuthStore();
const username = computed(() => authStore.username);

return {
username,
};
}
});
</script>

<style scoped>
/* Add your styles for HomePage */
</style>

0 comments on commit 78288f4

Please sign in to comment.