diff --git a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/UserController.java b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/UserController.java index 81533d14a9e1586c3a7d8c04535649df0f98d3a7..c01f490fcffaef30f2d0d97a036ca737e35a778e 100644 --- a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/UserController.java +++ b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/UserController.java @@ -9,15 +9,19 @@ import vt.CS5934.SwitchRoom.models.ResponseModel; import vt.CS5934.SwitchRoom.models.UserModel; import vt.CS5934.SwitchRoom.services.UserService; import vt.CS5934.SwitchRoom.hash.SHAModel; -import lombok.Getter; +import javax.servlet.http.Cookie; +import javax.servlet.http.HttpServletResponse; import java.security.NoSuchAlgorithmException; /** * The "@RestController" made the class into rest handle class * The "@RequestMapping("example")" on the class level make it only react to url ".../example/..." */ -@CrossOrigin +@CrossOrigin( + allowCredentials = "true", + origins = {"http://localhost:8080/"} +) @RestController @RequestMapping("user") public class UserController { @@ -58,7 +62,7 @@ public class UserController { } @PostMapping("/loginUser") - public ResponseModel loginUser(@RequestBody UserModel user) throws NoSuchAlgorithmException { + public ResponseModel loginUser(@RequestBody UserModel user, HttpServletResponse servletResponse) throws NoSuchAlgorithmException { logger.info("You reached the handlePost() functions."); ResponseModel response = new ResponseModel(); SHAModel hash = new SHAModel(); @@ -69,16 +73,23 @@ public class UserController { if (existUser != null && existUser.getPassword().equals(inputPassword)) { response.setMessage("Login in successfully"); response.setStatus(HttpStatus.OK); - var token = Token.of(existUser.getUserId(), 10L, "secret"); - existUser.setToken(token.getToken()); +// var token = Token.of(existUser.getUserId(), 10L, "secret"); +// existUser.setToken(token.getToken()); } else { response.setMessage("Couldn't find an account matching the login info you entered"); response.setStatus(HttpStatus.FORBIDDEN); } +// Cookie theCookie = new Cookie("token", token.getToken()); + Cookie theCookie = new Cookie("userId", Integer.toString(existUser.getUserId())); // use UserId for now + theCookie.setHttpOnly(false); + theCookie.setSecure(false); + theCookie.setPath("/"); + theCookie.setMaxAge(60); + servletResponse.addCookie(theCookie); + existUser.setPassword(null); response.setData(existUser); - response.setData(existUser); return response; }catch (Exception e){ @@ -88,10 +99,17 @@ public class UserController { null); } } - @PostMapping("/checkLoginSession") - public ResponseModel checkLoginSession(@RequestBody Object json) { + @GetMapping("/checkLoginSession") + public ResponseModel checkLoginSession(@CookieValue(value = "userId", required = false) String token) { ResponseModel response = new ResponseModel(); - response.setStatus(HttpStatus.OK); + + if (token == null) { + System.out.println("checkLoginSession: FORBIDDEN"); + response.setStatus(HttpStatus.FORBIDDEN); + } else { + System.out.println("checkLoginSession: OK"); + response.setStatus(HttpStatus.OK); + } return response; } diff --git a/FrontendFolder/switch-room/src/components/AppHeader.vue b/FrontendFolder/switch-room/src/components/AppHeader.vue index 615723eb70da5e096ef449b186b886188acde2de..442c1208867ed956e076355b4869d666f0913a73 100644 --- a/FrontendFolder/switch-room/src/components/AppHeader.vue +++ b/FrontendFolder/switch-room/src/components/AppHeader.vue @@ -30,8 +30,8 @@ export default defineComponent({ logOut: "logOutApi", }), hanldeLogOut() { - localStorage.setItem("token", ""); this.logOut() + document.cookie = 'userId=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; this.$router.push("/"); } } diff --git a/FrontendFolder/switch-room/src/components/MainPage.vue b/FrontendFolder/switch-room/src/components/MainPage.vue index e946219d74d21c33bbf4fdf56545a51553c6c0af..2d69366a732961d499c9203881a7cbac9033bee8 100644 --- a/FrontendFolder/switch-room/src/components/MainPage.vue +++ b/FrontendFolder/switch-room/src/components/MainPage.vue @@ -85,15 +85,14 @@ export default defineComponent({ actionLoginApi: "loginApi", }), async handleCreated() { - let token = localStorage.getItem('token'); - if (token) { - await checkLoginSession(JSON.stringify(token)) - .then((result) => { - if (result.status == "OK") { - this.$router.push("/login-main-page"); - } - }) - } + await checkLoginSession() + .then((result) => { + if (result.status == "OK") { + this.$router.push({name: 'LoginMainPage'}); + } else { + this.$router.push({name: 'home'}) + } + }) }, async handleLogin() { const payload = { @@ -102,7 +101,7 @@ export default defineComponent({ }; await this.actionLoginApi(payload); if (this.getLoginStatus){ - this.$router.push("/login-main-page"); + this.$router.push({name: 'LoginMainPage'}); } }, }, diff --git a/FrontendFolder/switch-room/src/router/index.ts b/FrontendFolder/switch-room/src/router/index.ts index 877fcbd8c12b1ed51f77a8dfecb1c3a7e02ccc93..b357ec61f93b63b9f0f6ba04bf6bb5fca2258c99 100644 --- a/FrontendFolder/switch-room/src/router/index.ts +++ b/FrontendFolder/switch-room/src/router/index.ts @@ -1,7 +1,6 @@ import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router"; import HomeView from "../views/HomeView.vue"; import RegisterView from "../views/RegisterView.vue"; -import store from "../store/index" const routes: Array<RouteRecordRaw> = [ { @@ -50,7 +49,7 @@ const router = createRouter({ router.beforeEach((to, from, next) => { if (to.matched.some(record => record.meta.requiresAuth)) { - if (!store.getters["auth/getLoginStatus"]) { + if (!document.cookie) { next({ name: 'home' }) } else { next() diff --git a/FrontendFolder/switch-room/src/services/ServerHttpService.ts b/FrontendFolder/switch-room/src/services/ServerHttpService.ts index ea93675e01d8d8767e377c938f54c0e8396075dc..14c4c3f247daf8efcbf8b4d295f94a967e75f428 100644 --- a/FrontendFolder/switch-room/src/services/ServerHttpService.ts +++ b/FrontendFolder/switch-room/src/services/ServerHttpService.ts @@ -11,6 +11,7 @@ function Get(path: string) { return fetch(url, { method: "GET", + credentials: "include", }) .then((response) => { if (response.ok) { @@ -31,6 +32,7 @@ function Post(path: string, bodyData: any) { console.log("With Data: ", JSON.stringify(bodyData)); return fetch(url, { method: "POST", + credentials: "include", headers: { "Content-Type": "application/json", }, diff --git a/FrontendFolder/switch-room/src/services/UserService.ts b/FrontendFolder/switch-room/src/services/UserService.ts index 9df72caa1662853083eaa9352bb6dc54bfde73db..b6553b67836650defc77abf2c723f8be21eba92b 100644 --- a/FrontendFolder/switch-room/src/services/UserService.ts +++ b/FrontendFolder/switch-room/src/services/UserService.ts @@ -11,9 +11,9 @@ function loginUser(userData: any) { // console.log(Server_URL + baseUrl + urlPath); return serverHttpService.Post(baseUrl + urlPath, JSON.parse(userData)); } -function checkLoginSession(token: any) { +function checkLoginSession() { const urlPath = "/checkLoginSession"; - return serverHttpService.Post(baseUrl + urlPath, JSON.parse(token)); + return serverHttpService.Get(baseUrl + urlPath); } export { postUserDataToServer, loginUser, checkLoginSession }; diff --git a/FrontendFolder/switch-room/src/store/modules/auth.ts b/FrontendFolder/switch-room/src/store/modules/auth.ts index a2235b596d9c3abc1a089edbac70bdbdd659690a..85bc4c1ae52381bd0bec95b8fbaafcffd0eea780 100644 --- a/FrontendFolder/switch-room/src/store/modules/auth.ts +++ b/FrontendFolder/switch-room/src/store/modules/auth.ts @@ -16,8 +16,6 @@ const actions = { .catch((error) => alert(error)); if (response.status == "OK") { commit("setLoginStatus", true); - console.log("login token: " + response.data.token) - localStorage.setItem('token', response.data.token) } else { alert(response.message) }