实现根据登录不同角色跳转至对应界面(springboot+vue的家教平台项目)

一.概述

项目中有三种不同角色,分别是管理员,教师,家长。现在要实现在登录时根据不同的角色跳转至不同的界面。

二.思路分析

1. 后端确认角色信息

  • 角色验证:确保后端在登录成功后,将用户的角色信息包含在响应中。这意味着除了返回基本的用户信息(如用户名、头像等),还需要明确返回用户的角色。
  • 安全性:确保角色信息在传输过程中是安全的,避免被篡改。

2. 前端处理登录响应

  • 接收角色信息:在前端登录方法中,接收并存储来自后端的角色信息。这可以存储在 localStorageVuex 状态管理中,或者组件的 data 中。
  • 判断角色:根据接收到的角色信息,确定用户应当被重定向到哪个页面。

3. 设置路由

  • 定义不同的路由:在前端路由配置中,为不同的角色定义不同的路由路径和组件。例如,管理员可能跳转到 /admin/dashboard,教师跳转到 /teacher/home,家长跳转到 /parent/home
  • 动态路由跳转:在登录成功后,根据用户的角色动态地选择要跳转的路由。

三.后端代码编写:

在后端中成功登录时会返回一个user对象,这个对象中就包括了角色的属性值,由前端接收并进行判断跳转。

public ResponseEntity<ApiResponse<?>> login(@RequestBody LoginRequest loginRequest) {
        User user = userService.selectByPhone2(loginRequest.getPhoneNumber());
        if (user != null && userService.checkPassword(loginRequest.getPassword(), user.getUserPassword())) {
            if (user.getUserRole().equals(loginRequest.getRole())){
                return ResponseEntity.ok(ApiResponse.success("登录成功",user));
            }else {
                return ResponseEntity.status(401).body(ApiResponse.error("角色不匹配"));
            }
        } else {
            return ResponseEntity.status(401).body(ApiResponse.error("登录失败,密码错误"));
        }
    }

四.前端代码编写

在登录的方法中获取对象名,对象图片及对象角色,根据角色的判断跳转至不同的界面

async login() {
      try {
        const response = await axios.post('http://localhost:8081/api/auth/login', {
          phoneNumber: this.phoneNumber,
          password: this.password,
          role:this.role
        });

        if (response.data.success) {
          this.$message.success("登录成功")
          // 将数据存储在 localStorage 中
          localStorage.setItem('userPicture', response.data.data.userPicture);
          localStorage.setItem('userName', response.data.data.userName);
          localStorage.setItem('userRole', response.data.data.userRole);

          const userRole = response.data.data.userRole;
          if (userRole === '管理员') {
            this.$router.push({ name: 'Home' });
          } else if (userRole === '教师') {
            this.$router.push({ name: 'Teacher' });
          } else if (userRole === '家长') {
            this.$router.push({ name: 'Parent' });
          }
        } else {
          this.errorMessage = response.data.message;
        }
      } catch (error) {
        this.$message.error("登录失败")
        this.errorMessage = '登录失败,请检查账号、密码以及角色';
      }
    },

五.在index.js中要编写对应的界面跳转代码

{
        path: '/teacher',
        name: 'Teacher',
        component: Teacher,  // 注册页面的路由配置
    },
    {
        path: '/parent',
        name: 'Parent',
        component: Parent,  // 注册页面的路由配置
    },

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值