如何通过ajax发送身份验证令牌?的node.js

时间:2018-02-06 14:53:05

标签: node.js ajax authentication token

我用邮递员来测试我的登录,注册请求。通过将令牌作为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);
      }
    });
  })
});

0 个答案:

没有答案