You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js登录API对接前端TS文件按角色跳转路由问题求助

核心问题
  • 后端登录接口返回的响应数据中未返回role字段,前端读取result.role值为undefined,admin和employee的判断条件都不满足,所以只会触发alert提示,不会执行跳转逻辑。
  • 前端未先校验接口返回的success状态,异常场景判断逻辑不严谨。
  • localStorage存储的key包含空格不符合规范,后续读取时容易出错。
修复步骤

1. 修改后端接口代码

在admin和普通用户的返回JSON中新增role字段,把用户角色透传给前端:

login: (req, res ) =>{
    const body = req.body;
    getUserByUserEmail(body.email, (err, results) => {
        if(err) {
            console.log(err);
            return res.json({
                success : 0 ,
                message : "服务端错误"
            });
        }
        if(!results) {
            return res.json({
                success : 0 ,
                message : "Invalid Email or Password"
            });
        }

        const result = compareSync( body.password, results[0].password);
        if (result) {
            results[0].password = "";
            const jsontoken = sign({ result: results }, "qwe123", {expiresIn : "3h"});
            // Admin part
            if(results[0].role=='admin')
            {
                        return res.json({
                            success : 1 ,
                            message : "You are Successfully logged in as admin!",
                            token : jsontoken,
                            role: results[0].role // 新增返回role字段
                        });
            }
            // Employee part
            else {
               
            return res.json({
                            success : 1 ,
                            message : "You are Successfully logged in as user!",
                            token : jsontoken,
                            role: results[0].role // 新增返回role字段
                        });
            }

         }
        else{
            return res.json({
                success : 0 ,
                message : "Invalid Email or Password"
            });
        }
  
    });
}

*注意:如果你的数据库中普通用户的role字段值为user,需要把前端的result.role=='employee'的判断条件改成result.role=='user',保持前后端字段值一致即可。

2. 修改前端TS代码

先校验登录成功状态,再处理跳转逻辑,优化localStorage存储key:

onSubmit() {
    if(this.form.valid){
      this.userdataService.login(this.form.value).subscribe(result=>{
        // 先判断登录是否成功
        if(result.success === 1){
          localStorage.setItem('token',result.token);
          if(result.role=='admin'){
            this.router.navigateByUrl('/employee-list');
          }else if(result.role=='employee'){ // 和后端返回的普通用户role值保持一致
            this.router.navigateByUrl('/log-Page');
          }else{
            alert('未知用户角色');
          }
        }else{
          alert(result.message);
        }
      });
    }
}

内容的提问来源于stack exchange,提问作者Malik Tahir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 22:45:00