用户无法使用 JWT 和 Node API 登录 Angular js
Posted
技术标签:
【中文标题】用户无法使用 JWT 和 Node API 登录 Angular js【英文标题】:User cannot login in Angular js with JWT and Node API 【发布时间】:2017-02-03 16:34:11 【问题描述】:我正在为用户登录创建一个 Node api,并正在使用 JSON Web Token 进行身份验证。
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 控制器中缺少某些内容,但我无法找出错误。
有人可以帮我找出问题吗?
谢谢。
【问题讨论】:
【参考方案1】:当您发送错误响应时,请尝试发送 http 状态代码作为响应。只是尝试发送
res.send(400, success:false, msg:'Auth Failed');
【讨论】:
with express 4 使用 res.status(400).send(success:false, msg:'Auth Failed'); 如果用户name
和 password
都错了,那么它会显示正确的警报消息。但是当user
匹配和password
不匹配时,它总是返回alert("successfully loggedin")
然后检查你的 comparePassword 函数。
下面是我的比较密码功能,似乎没有什么错误。 UserSchema.methods.comparePassword = function (passw, cb) bcrypt.compare(passw, this.password, function (err, isMatch) if (err) return cb(err); cb(null, isMatch); ); ;
以上是关于用户无法使用 JWT 和 Node API 登录 Angular js的主要内容,如果未能解决你的问题,请参考以下文章