2016-09-26 66 views
0

我正在为用户登录创建Node api,并且正在使用JSON Web Token进行身份验证。用户无法使用JWT和Node API登录Angular js

apiRoutes.put('/login', function(req, res){ 
    User.findOne({name:req.body.name}, function(err, user){ 
    if(err){throw err;} 
    else{ 
     if(!user){ 
     res.send({success:false, msg:'Auth Failed'}); 
     }else{ 
     user.comparePassword(req.body.password, function(err, isMatch){ 
      if(isMatch && !err){ 
      var token=jwt.encode(user, config.secret); 
      res.json({success:true, token:'JWT' +token}); 
      }else{ 
      res.send({success:false, msg:'Auth Fails:wrong password'}); 
      } 
     }); 
     } 
    } 
    }); 
}); 

登录控制器

app.controller('loginCtrl', function($http, $scope, $location, $cookieStore){ 

$scope.login=function(){ 
    console.log($scope.loginUser); 
    $http.put('/api/login', $scope.loginUser).then(function(response){ 

     console.log(response.data.token); 
     $cookieStore.put('token',response.data.token); 
     $scope.currentUser=$scope.loginUser.name; 
     alert("Successfully Loggedin"); 

     }, function(err){ 
     alert('Bad Login Credentials'); 
     }); 

     }; 
    }); 

登录表单HTML

<div class="post" ng-controller="loginCtrl"> 
     <form method="post"> 
      <div class="form-group" > 
      <label>Name</label> 
      <input type="text" class="form-control" name="name" ng-model="loginUser.name" /> 
     </div> 
     <div class="form-group"> 
      <label>Password</label> 
      <input type="password" class="form-control" name="password" ng-model="loginUser.password"/> 
     </div> 
     <div class="form-group"> 
      <button class="btn btn-success" ng-click="login()" >Login</button> 
     </div> 
     </form> 

     </div> 

的问题是,当我点击与用户凭据登录按钮,它始终是返回alert("successfully logged in");,尽管用户凭据是对还是错。我认为在Angular Login控制器中缺少一些东西,但我无法找出错误。

有人可以帮我找出问题吗?

谢谢。

回答

2

当您发送错误响应时,尝试发送http状态码作为响应。只要尝试发送

res.send(400, {success:false, msg:'Auth Failed'}); 
+2

与快递4使用res.status(400).send({成功:假,味精:'身份验证失败'}); – Gatsbill

+0

不..不工作...面临同样的问题。 –

+0

如果用户'name'和'password'都是错误的,那么它显示正确的提醒信息。但是当'用户'匹配和'密码'不匹配时,它总是返回'alert(“成功登录”) –