解析授权标头时出现Express NTLM错误

时间:2019-07-15 09:32:27

标签: javascript node.js express axios express-ntlm

我发布了一个问题here,但经过一番调查后,我才意识到不是引起我问题的axios请求。我不确定如何结束一个问题。

尝试将Axios Get请求发送到我的快速后端服务器时,出现以下错误。前端托管在localhost:8080上,后端托管在localhost:5000。

[express-ntlm] Error when parsing Authorization header for URI http://localhost:5000/api/user/generateToken

这是我的客户端Axios请求

axios.defaults.baseURL = 'http://localhost:5000/';

const generateToken = () => {
    axios
      .get('/api/user/generateToken', {
        withCredentials: true,
      })
      .then(payload => {
        // Set Auth Header with returned JWT Token
      })
      .catch(err => {
        console.log(err.response);
      });

这是网站首次启动后发送的第一个请求,它应返回一个JWT令牌,我将使用该令牌登录用户。

然后我进行了express-ntlm设置,以使用户登录的用户名可以检查用户是否在我们的数据库中,如果是,则返回有效令牌。

设置express-ntlm的服务器代码为

const express = require('express');
const http = require('http');
const path = require('path');
const cors = require('cors');
const ntlm = require('express-ntlm');
const passport = require('passport');

const server = express();

server.use(
  ntlm({
    debug: function() {
      var args = Array.prototype.slice.apply(arguments);
      console.log.apply(null, args);
    },
    domain: 'domain',
    domaincontroller: 'ldap://domainAddress',
  })
);

如果我随后在浏览器中直接导航到http://localhost:5000/api/user/generateToken,则会得到预期的结果。但是,如果我使用axios.get并将其代理到url,则会在服务器控制台中收到上述错误,并在客户端控制台中收到400错误请求。

这是Router.get代码

// @route   GET api/user/generateToken
// @desc    Create JWT Token
// @access  Public
router.get('/generateToken', (req, res) => {
  const errors = {};

  const username = req.ntlm.UserName;

  return User.findOne({ username }).then(user => {
    // Create JWT and return it to the user
  });
});

我不确定从哪里可以找到它或者是axios设置标头所需的一些常规设置,还是我需要为express-ntlm更改的内容。奇怪的是,我可以直接转到页面,并且可以使用axios,但失败

1 个答案:

答案 0 :(得分:0)

尝试打印标题以进行控制台,并检查Authorization标头有什么问题。可能是Axios对其进行了修改。

比较通过手动安装与通过axios获得的标头。