2016-09-26 44 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(「成功登錄」) –