我用邮递员来测试我的登录,注册请求。通过将令牌作为res.send('x-auth',token)
发送它确实有效。但是当我尝试使用ajax向数据库提交用户输入时,令牌会被发送,但在undefined
调用时仍然是req.header('x-auth')
。这会导致我的应用在用户尝试401 (unauthorized)
或GET
数据时返回POST
。
我的验证文件用于验证用户显示数据的权限。
const {User} = require('.././models/users-Model');
var authenticate = function(req, res, next){
var token = req.header('x-auth');
console.log(token);
User.findByToken(token).then(function(user){
if(!user){
return Promise.reject();
}
req.user = user;
req.token = token;
next();
}).catch(function(e){
res.status(401).send();
});
}
module.exports = {authenticate};
app.js中的
function userLogin(req, res){
var body = _.pick(req.body, ["email", "password"]);
User.findByCredentials(body.email, body.password).then(function(user){
return user.generateAuthToken().then(function(token){
res.header('x-auth', token).send(user);
});
}).catch(function(e){
res.status(400).send();
});
}
app.post('/users/login', userLogin);
function listPost(req, res){
var Data = new budgetCalculator({
_creator:req.user._id,
_id: req.body._id,
firstItem: req.body.firstItem,
firstPrice: req.body.firstPrice,
secondItem: req.body.secondItem,
secondPrice: req.body.secondPrice,
thirdItem: req.body.thirdItem,
thirdPrice: req.body.thirdPrice,
tBudget: req.body.tBudget
});
Data.save().then(function(Data){
res.send(Data);
}).catch(function(e){
res.send(e)
});
}
app.post('/' , authenticate, listPost);
列出帖子的AJAX GET
请求。
// GET all notes from database
$(function (){
$("#showAll").click(function(){
$.ajax({
url:'/budget',
type:'get',
dataType: 'html',
contentType: 'application/json',
data: JSON.stringify(),
success: function(Data){
$("#DisplayNotes").text(Data);
$('#DisplayNotes').css({
display: 'inline-block'
});
},
error: function(err, status, xhr){
$("#DisplayNotes").addClass('alert-danger').removeClass('alert-success');
$("#DisplayNotes").text('ERROR!');
$('#DisplayNotes').css({
display: 'inline-block'
});
$("#DisplayNotes").fadeOut(3000, function() { $(this).css({display: 'none'});
$("#DisplayNotes").addClass('alert-success').removeClass('alert-danger');
});
}
});
});
});
AJAX POST
登录表单提交请求。
$(function(){
$('.form').submit(function(e){
e.preventDefault();
$.ajax({
url:'/users/login',
type:'post',
dataType:'json',
contentType: 'application/json',
data: JSON.stringify({
email: $('input[type="email"]').val(),
password: $('input[type="password"]').val()
}),
success: function(doc){
window.location = "/app";
},
error: function(err, status, xhr){
console.log(err);
$('#sucess').text(err);
}
});
})
});