diff --git a/frontend/src/components/LoginPage.vue b/frontend/src/components/LoginPage.vue
index d7d2f228c49cc75188e7c322d4b934bdda8488db..73815fed63280d197aa655028195a7b78cefe757 100644
--- a/frontend/src/components/LoginPage.vue
+++ b/frontend/src/components/LoginPage.vue
@@ -2,6 +2,11 @@
 
 export default {
   name: "LoginPage",
+  created() {
+    if(localStorage.getItem('isLoggedIn') === 'true' && localStorage.getItem('userId') !== null){
+      this.$router.push({ name: 'main', params: {id: localStorage.getItem('userId')}})
+    }
+  },
   data(){
     return {
       user: {
@@ -15,11 +20,9 @@ export default {
   },
   computed: {
     checkEmptyFieldsSignup(){
-      console.log("here: " + this.user.userName)
       return this.user.userName === '' || this.user.password === '' || this.repeatedPassword === '' || this.user.password !== this.repeatedPassword;
     },
     checkEmptyFieldsSignin(){
-      console.log("here: " + this.user.userName)
       return this.user.userName === '' || this.user.password === ''
     }
   },
@@ -32,6 +35,7 @@ export default {
           headers: {
             "Content-Type": "application/json"
           },
+          credentials: 'include',
           body: JSON.stringify({
             "userName": this.user.userName,
             "password": this.user.password
@@ -52,6 +56,7 @@ export default {
         headers: {
           "Content-Type": "application/json"
         },
+        credentials: 'include',
         body: JSON.stringify({
           "userName": this.user.userName,
           "password": this.user.password
@@ -61,23 +66,20 @@ export default {
       const responseData = await response.json();
 
       if(response.status === 200){
+        localStorage.setItem('userId', responseData.userId)
+        localStorage.setItem('isLoggedIn', 'true')
         this.$bvToast.show('signin-success')
         await this.$router.push({ name: 'main', params: {id: responseData.userId}});
       } else {
         this.$bvToast.show('invalid-user-password')
       }
     },
-    async signOut(){
-      await this.$router.push({ name: 'login'});
-    }
   }
 }
 </script>
 
 <template>
-
-  <b-container fluid id="main-container">
-
+  <b-container class="h-100" fluid id="main-container">
     <b-row class="justify-content-center align-items-center">
       <b-col></b-col>
       <b-col>
@@ -105,7 +107,6 @@ export default {
           </b-card-body>
           <b-card-footer>
             © Jan Schnaidt & Abdullah Kiran, 2024
-            <b-button @click="signOut">Test Logout</b-button>
           </b-card-footer>
         </b-card>
       </b-col>
diff --git a/frontend/src/components/MainPage.vue b/frontend/src/components/MainPage.vue
index fc7c196bc92dce8c23118cadebc99c7d28c4256c..1a89d0f13020ac3cc1d71783c264444e6a56d5e9 100644
--- a/frontend/src/components/MainPage.vue
+++ b/frontend/src/components/MainPage.vue
@@ -2,9 +2,14 @@
 export default {
   name: "MainPage",
   created(){
-    console.log('main page: ' + this.$route.params.id)
+    if(localStorage.getItem('isLoggedIn') === null && localStorage.getItem('userId') !== 'true'){
+      this.$router.push({ name: 'login' })
+    }
+
+    this.userId = localStorage.getItem('userId')
+    this.getAllTodos()
   },
-  data: function () {
+  data() {
     return {
       items: [],
       newItem: "",
@@ -12,10 +17,9 @@ export default {
       showDetailsModal: false,
       selectedItem: "",
       user: {
-        userId: this.$route.params.id,
+        userId: '',
         userName: '',
-        password: '',
-        todoList: []
+        password: ''
       },
       todo: {
         todoId: '',
@@ -25,9 +29,6 @@ export default {
         completed: false
       }
     }
-  },
-  computed: {
-
   },
   methods: {
     asdItem() {
@@ -40,7 +41,16 @@ export default {
       this.selectedItem = item;
       this.showDetailsModal = true;
     },
+    async getAllTodos(){
+      let url = `http://localhost:9876/user/getAllTodos?userId=${localStorage.getItem('userId')}`
+
+      const response = await fetch(url, {
+        method: 'GET',
+        credentials: 'include',
+      })
 
+      this.items = await response.json()
+    },
     async addTodo(){
       let url = "http://localhost:9876/user/addTodo"
 
@@ -49,15 +59,36 @@ export default {
         headers: {
           "Content-Type": "application/json"
         },
+        credentials: 'include',  // Ensure credentials are included
         body: JSON.stringify({
           "title": this.todo.title,
           "description": this.todo.description,
           "userId": this.$route.params.id,
           "completed": false
         })
+      });
+
+      this.items = await response.json()
+    },
+    async signout(){
+      let url = "http://localhost:9876/user/signout"
+
+      const response = await fetch(url, {
+        method: 'POST',
+        headers: {
+          'Content-Type': 'application/json'
+        },
+        credentials: 'include',
+        body: JSON.stringify({
+          'userId': localStorage.getItem('userId')
+        })
       })
 
-      console.log(response)
+      if(response.status === 200){
+        localStorage.removeItem('isLoggedIn')
+        localStorage.removeItem('userId')
+        await this.$router.push({ name: 'login'})
+      }
     }
   }
 }
@@ -66,7 +97,7 @@ export default {
 <template>
 <div>
   <b-container fluid id="main-container">
-
+    <b-button @click="signout">Log out</b-button>
     <b-row class="justify-content-center align-items-center">
       <b-col>
         <b-card class="shadow-lg" border-variant="secondary" title="ToDo-App">
@@ -84,7 +115,8 @@ export default {
             </b-modal>
             <ul class="list-group mt-3">
               <li v-for="(item, index) in items" :key="index" class="list-group-item" @click="showDetails(item)">
-                {{ item }}
+                <h5> {{ item.title }} </h5>
+                <p> {{ item.description }}</p>
               </li>
             </ul>
             <b-modal v-model="showDetailsModal" title="Details" hide-header id="showDetailsModal">
@@ -97,26 +129,21 @@ export default {
         </b-card>
       </b-col>
     </b-row>
-    <!--
-    ----- toasts & alerts -----
-
-    <b-toast no-close-button auto-hide-delay="5000" variant="success" id="account-created-toast" title="success">
-      account for {{ this.user.userName }} has been created
-    </b-toast>
-    <b-toast no-close-button auto-hide-delay="5000" variant="danger" id="account-not-created-toast" title="error">
-      user {{ this.user.userName }} already exists
-    </b-toast>
-    <b-toast signin-success auto-hide-delay="5000" variant="success" id="signin-success" title="success">
-      Signin Success
-    </b-toast>
-    <b-toast invalid-user-password auto-hide-delay="10000" variant="danger" id="invalid-user-password" title="error">
-      User {{ this.user.userName }} or Password invalid
-    </b-toast>
-    -->
   </b-container>
 </div>
 </template>
 
 <style scoped>
 
+.list-group-item {
+  padding: 5px;
+  margin-bottom: 10px;
+  border-radius: 5px;
+  background-color: #f8f9fa;
+  border: 1px darkgray solid;
+}
+
+.list-group-item:hover {
+  background-color: #e9ecef;
+}
 </style>
\ No newline at end of file
diff --git a/src/main/java/com/cloudcomputing/todo/controller/UserController.java b/src/main/java/com/cloudcomputing/todo/controller/UserController.java
index 6fddd92687348fa1c535775616a3c129379c52fd..e05a8d7e26610d8cf55271f424730c3c5862a779 100644
--- a/src/main/java/com/cloudcomputing/todo/controller/UserController.java
+++ b/src/main/java/com/cloudcomputing/todo/controller/UserController.java
@@ -3,6 +3,7 @@ package com.cloudcomputing.todo.controller;
 import com.cloudcomputing.todo.dto.TodoDTO;
 import com.cloudcomputing.todo.dto.UserDTO;
 import com.cloudcomputing.todo.service.UserService;
+import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpSession;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -13,7 +14,7 @@ import java.util.List;
 
 @RestController
 @RequestMapping("/user")
-@CrossOrigin(origins = "*")
+@CrossOrigin(origins = "http://localhost:8080", allowCredentials = "true")
 public class UserController {
     @Autowired
     private UserService userService;
@@ -30,8 +31,8 @@ public class UserController {
     }
 
     @PostMapping("/signin")
-    public ResponseEntity<UserDTO> login(HttpSession session, @RequestBody UserDTO user) {
-        boolean loginSuccessful = userService.login(session, user);
+    public ResponseEntity<UserDTO> login(HttpServletRequest request, @RequestBody UserDTO user) {
+        boolean loginSuccessful = userService.login(request, user);
         if(loginSuccessful){
             return new ResponseEntity<>(userService.getUser(user), HttpStatus.OK);
         }
@@ -39,10 +40,33 @@ public class UserController {
         return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
     }
 
+    @PostMapping("/signout")
+    public ResponseEntity<String> logout(HttpServletRequest request, @RequestBody String userId) {
+        boolean logoutSuccessful = userService.logout(request, userId);
+        if(logoutSuccessful){
+            return new ResponseEntity<>(HttpStatus.OK);
+        }
+
+        return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
+    }
+
     @PostMapping("/addTodo")
-    public ResponseEntity<List<TodoDTO>> addTodo(HttpSession session, @RequestBody TodoDTO todoDTO) {
-        session.getAttribute("currentUser");
-        List<TodoDTO> todos = userService.addTodo(todoDTO);
-        return new ResponseEntity<>(todos, HttpStatus.CREATED);
+    public ResponseEntity<List<TodoDTO>> addTodo(HttpServletRequest request, @RequestBody TodoDTO todoDTO) {
+        if(userService.validateSession(request)){
+            List<TodoDTO> todos = userService.addTodo(todoDTO);
+            return new ResponseEntity<>(todos, HttpStatus.CREATED);
+        }
+
+        return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
+    }
+
+    @GetMapping("/getAllTodos")
+    public ResponseEntity<List<TodoDTO>> getAllTodos(HttpServletRequest request, @RequestParam String userId) {
+        if(userService.validateSession(request)){
+            List<TodoDTO> todos = userService.getAllTodos(userId);
+            return new ResponseEntity<>(todos, HttpStatus.OK);
+        }
+
+        return new ResponseEntity<>(null, HttpStatus.UNAUTHORIZED);
     }
 }
diff --git a/src/main/java/com/cloudcomputing/todo/service/UserService.java b/src/main/java/com/cloudcomputing/todo/service/UserService.java
index f5e73dd7317dec9197923de2df3e364cab9530c8..72def1a6b3d90e369300f827569a495ab6c711bd 100644
--- a/src/main/java/com/cloudcomputing/todo/service/UserService.java
+++ b/src/main/java/com/cloudcomputing/todo/service/UserService.java
@@ -9,6 +9,7 @@ import com.cloudcomputing.todo.mapper.UserMapper;
 import com.cloudcomputing.todo.repository.TodoRepository;
 import com.cloudcomputing.todo.repository.UserRepository;
 import com.cloudcomputing.todo.util.CustomAuthenticator;
+import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpSession;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -27,8 +28,10 @@ public class UserService {
 
     @Autowired
     private CustomAuthenticator customAuthenticator;
+
     @Autowired
     private TodoMapper todoMapper;
+
     @Autowired
     private TodoRepository todoRepository;
 
@@ -47,15 +50,37 @@ public class UserService {
         return userMapper.entityToDto(userRepository.findByUserName(userDTO.getUserName()));
     }
 
-    public boolean login(HttpSession session, UserDTO userDTO) {
+    public boolean login(HttpServletRequest request, UserDTO userDTO) {
         if(customAuthenticator.authenticate(userDTO)){
-            session.setAttribute("currentUser", userDTO);
+            String userId = userRepository.findByUserName(userDTO.getUserName()).getUserId();
+            HttpSession session = request.getSession();
+            session.setAttribute("userId", userId);
             return true;
         }
 
         return false;
     }
 
+    public boolean logout(HttpServletRequest request, String userId) {
+        HttpSession session = request.getSession();
+
+        if(session != null){
+            session.invalidate();
+        }
+
+        return true;
+    }
+
+    public List<TodoDTO> getAllTodos(String userId) {
+        List <Todo> todoList = todoRepository.findAllByUserId(userId);
+        List<TodoDTO> todoDTOList = new ArrayList<>();
+
+        todoList.forEach((todoItem) -> {
+            todoDTOList.add(todoMapper.entityToDto(todoItem));
+        });
+        return todoDTOList;
+    }
+
     public List<TodoDTO> addTodo(TodoDTO todoDTO){
         Todo todo = todoMapper.dtoToEntity(todoDTO);
         todoRepository.save(todo);
@@ -67,4 +92,10 @@ public class UserService {
         });
         return todoDTOList;
     }
+
+    public boolean validateSession(HttpServletRequest request) {
+        HttpSession session = request.getSession(false);
+        System.out.println("Session ID: " + (session != null ? session.getId() : "null"));
+        return session != null && session.getAttribute("userId") != null;
+    }
 }