角度登录身份验证错误

时间:2018-07-03 18:17:58

标签: angular typescript visual-studio-code observable

我是Angular的新手。我正在使用这种Angular方法来登录系统。

loginuser(){
    const user = {
      username: this.username,
      password: this.password
    };
    this.Auth.loginUser(user).subscribe((res)=>{
      if(res){
        this.Auth.storeData(res.token, res.user);
        this.flashMessage.show('You are Successfully logged In.', { cssClass: 'alert-success', timeout: 5000 });
        this.router.navigate(['/userProfile']);
      }else{
        this.flashMessage.show('You are Password or Username not Correct.', { cssClass: 'alert-success', timeout: 5000 });
        this.router.navigate(['/login']);
      }

    });
  }

但是我的VScode编辑器显示了这样的错误。 enter image description here

我的angular-cli也显示了这些错误。 enter image description here 但是在我的节点函数中,我明确定义了那些参数。这是我的节点函数。

router.post('/login', (req, res)=>{
    const name = req.body.username;
    const password = req.body.password;
    //console.log(password);
    User.findByName(name,(err, user)=>{
        if(err) throw err;
        if(!user){
            res.json({state: false, msg:"No User Found"});
            //return false;
        }
        User.passwordCheck(password,user.password, (err, match)=>{
            if(err) throw err;

            if(match){
                const token = jwt.sign({User} , config.secret, {expiresIn:86400*3});
                res.json({
                    state: true,
                    token: "JWT" + token,
                    user:{
                        id:user._id,
                        name:user.name,
                        ID:user.ID,
                        IDexpDate: user.IDexpDate
                    }
                });    
            }else {
                res.json({state:false,msg:"password does not match"});
            }
        });

    });   
    console.log(password);
});

我正在使用Angular 6开发该应用程序。不幸的是,我在很多地方都进行了搜索。我认为我的服务功能也需要给出答案,所以这是我的服务文件。

readonly baseURL ='http://localhost:3000/users/login';    
storeData(token,userdata){
    localStorage.setItem("tokenid",token);
    localStorage.setItem("user",JSON.stringify(userdata));
    this.authtoken = token;
    this.user= userdata
  }
  loginUser(user){
    let header = new HttpHeaders();
    header.append('Content-Type','application/json');

    return this.http.post(this.baseURL,user,{headers:header});
  }

但是当我console.log那些在控制台日志中给我值的res.token和res.user时。我的问题是,为什么vscode编辑器会向我显示这样的错误。非常感谢您给予您宝贵的时间来帮助我。

1 个答案:

答案 0 :(得分:0)

您在Node中为响应类型定义的内容不会延续到您的打字稿中。您必须手动定义它。

通过引用resp.userresp.token,Angular希望您定义响应以声明这些对象。通过设置resp: any,您可以告诉Angular实际上并不在乎寻找匹配类型。

如果您始终希望此处的响应包含用户和令牌,则最好声明响应:

resp: {
user: string,
token: string 
}