最近在看springboot + vue登录注册,发现登录有个简单的实现方式,就是用户登录之后,将用户信息放入后端session中,然后通过判断session是否存在用户信息,从而判断用户是否登录。
这是后端的登录校验逻辑,同时我在想前端怎么判断用户登录呢?因为如果没有登录需要跳转到登录界面。
我有一个想法就是:
后端登录成功后,往response header中填充一个自定义header,比如 X-Login,值为true或者false,然后前端通过X-Login的值从而判断是否登录。
代码大概长这个样子:
@PostMapping("/login") public void login(HttpSession httpSession, HttpServletResponse response, @RequestBody User user) throws Exception { // 真实场景是密码从数据库查询,而不是简单的 1234 log.info("login"); if (!"1234".equals(user.getPassword())) { throw new Exception("用户名或密码不正确"); } // 登录成功,将信息加入 session 中 httpSession.setAttribute("user", user); // 方便前端判断登录状态 response.setHeader("X-Login", "true"); } @DeleteMapping("/logout") public void logout(HttpSession httpSession, HttpServletResponse response) { httpSession.removeAttribute("user"); // 方便前端判断登录状态 response.setHeader("X-Login", "false"); }
请问可以这样实现吗,有没有什么问题?
用JWT的话:
@PostMapping("/login")public ResponseEntity<?> login(HttpServletResponse response, @RequestBody User user) { log.info("login"); if (!"1234".equals(user.getPassword())) { return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("用户名或密码不正确"); } String token = jwtService.generateToken(user); Cookie cookie = new Cookie("token", token); cookie.setHttpOnly(true); response.addCookie(cookie); return ResponseEntity.ok().body("登录成功");}@DeleteMapping("/logout")public ResponseEntity<?> logout(HttpServletResponse response) { Cookie cookie = new Cookie("token", null); cookie.setHttpOnly(true); cookie.setMaxAge(0); response.addCookie(cookie); return ResponseEntity.ok().body("登出成功");}
登录注册是互联网基建,就不要再想着自己瞎琢磨了,现有方案找一个来用就可以。另外,基础原理都是一样的,也不用想太多。
选好之后,根据你选择的方案来判断即可。
你使用了springboot + vue那应该就是前后分离,前后分离项目,就不用session了,直接用token,用的是 springboot 那就用 Spring Security 做权限控制,你那登录里面返回的就是一个jwt 生成的token给前端,前端每次请求,都在header里面增加一个Authorization,吧这个token带给后端
后端看下这个:https://github.com/spring-projects/spring-security-samples/tree/main/servlet/spring-boot/java/jwt/login
前端简单,就上面说的,每次请求带上 headers.Authorization = 'Bearer ' + localStorage.getItem("token");
判断是否登录,先看 localStorage.getItem("token")是否存在,再后端验证一下是否过期
cmf_is_user_login() 功能 判断前台用户是否登录 参数 无 返回 boolean
X1.0新增 sp_is_user_login() 功能: 判断用户是否已经登录 参数: 无 返回: 类型布尔 true/false
如果你已有幕布,直接登录即可。如果还没有账号,可以使用手机号码注册幕布账号,也可以通过QQ、微信直接注册并登录。 注:微信登录方式需要手机上安装有微信。 账号设置与绑定 登录幕布后,点左上角的头像或者轻按屏幕从左往右滑动,选择「应用设置 - 账号设置」。在这里可以修改头像和昵称,设置密码,绑定手机号码、微信、QQ账号。 注: 绑定手机后才可以设置账号密码,手机号即为账号。 解除绑定需要在电脑上登录
在首页点击注册进入注册页面,你可以使用手机号码注册幕布账号,也可以通过QQ、微信账户直接创建账号并登录。 账号设置与绑定 登录幕布后,点击右上角处用户头像,在下拉菜单中选择「账号设置」。在这里可以修改头像和昵称,设置密码,绑定手机号码、微信、QQ账号,查看账号是否为高级版以及高级版到期时间。 注: 绑定手机后才可以设置账号密码,手机号即为账号。 解绑最后一个登录方式后,账号将无法登录,请注意将文档
注册 / 登录 1.注册 注册入口: 访问 http://www.aikf.com/ 点击右上角注册按钮 输入注册手机号、图形验证码、手机验证码等进行注册 其他注册入口:手机登录http:/www.aikf.com/ 爱客服官方微信公众号注册:点击立即注册 2.登录 登录入口: 访问http://www.aikf.com/ 点击登录 输入用户名及登录密码,点击登录(见下图) 2.修改密码 在登录入
cmf_is_user_login() 功能 判断前台用户是否登录 参数 无 返回 boolean