Получить пользовательский заголовок из ответа ajax - PullRequest
0 голосов
/ 01 февраля 2019

enter image description hereenter image description here Я использую nodejs с express как остальные API, на стороне клиента я использую jQuery (ajax) для http-запроса.Когда пользователь выполняет запрос на вход в систему, сервер возвращает объект пользователя в качестве тела и токен x-auth в заголовке.Проблема в том, что по каким-то причинам я не вижу заголовок x-auth в данных ответа.Код на стороне сервера:

//POST api/login
app.post('/api/login', (req, res) => {

  var body = _.pick(req.body, ['email', 'password'])
  console.log(body)
  var user;
  User.findByCredentials(body.email, body.password).then((result) => {
    user = result
    return user.generateAuthToken()
  }).then((token) => {
    // as you see i put the token here as header, and it is not null i 
    // made debugging.
    res.status(200).header('x-auth', token).send(user) 
  }).catch((e) => {
    res.status(400).send('Unauthorized')
  })

})

Код на стороне клиента:

let loginRequest = {
        "email":username,
        "password":password
      }
      loginRequest = JSON.stringify(loginRequest)
      console.log(loginRequest)
      var res = $.ajax({
        url:"http://192.168.1.22:3000/api/login",
        method: "POST",
        data: loginRequest,
        contentType: "application/json;charset=utf-8",
        dataType: 'json',
        cache: false,
        success: function(user, status, response){
          console.log('Login success :'+status);
          console.log(user.fullName +", role: "+user.role)
         //i try to print all the headers here but it not contain the x-auth 
          console.log(`${response.getAllResponseHeaders()}`)

        },
        error: function(e){
          console.log("login error, status: "+e.status +" message : 
                                              "+e.responseText);
        }
      })

Когда я печатаю все заголовки: response.getAllResponseHeaders() результат будет: content-type: application/json; charset=utf-8

Iтакже есть Android-клиент для этого API и в Android у меня есть заголовок X-Auth.Я скучаю по чему-то в AJAX?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Я думаю, что все в порядке с вашим кодом, и проблема заключается в совместном использовании ресурсов.Прежде чем отправить запрос на url:"http://192.168.1.22:3000/api/login", ваш браузер проверяет, есть ли доступ к входящему запросу извне в вашем API (сервере), и если да, то ваш запрос будет отправлен на сервер.Чтобы включить входящий запрос извне, вы должны использовать cors

0 голосов
/ 01 февраля 2019

После сотен попыток я обнаружил, что, поскольку это был запрос CORS, мне было необходимо добавить Access-Control-Expose-Headers к res.header на стороне сервера

полный код для промежуточного программного обеспечения Express на сервере:

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*")
  res.header('Access-Control-Expose-Headers', 'x-auth'); //added this line
  res.header("Access-Control-Allow-Headers", "Origin, headers, X-Requested-With, Content-Type, contentType, Accept, x-auth");
  next()
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...