2015-12-05 3 views
2

Я использую jsonwebtoken для аутентификации пользователя. мой план состоит в том, чтобы сохранить токен в заголовке, а затем получить значение заголовка перед любым запросом. да, я сохранил значение в заголовке при регистрации успешно, но он должен перенаправить на другую страницу, как и любое другое приложение. я попытался перенаправить или отобразить другую страницу и получить ошибкуПеренаправление после res.end() в nodejs

Невозможно установить заголовки после их отправки.

apiRoutes.post('/authenticate', function(req, res) { 

User.findOne({ 
name: req.body.name 
    }, function(err, user) { 

    if (err) throw err; 

if (!user) { 
    res.json({ success: false, message: 'Authentication failed. User not found.' }); 
} else if (user) { 


    if (user.password != req.body.password) { 
    res.json({ success: false, message: 'Authentication failed. Wrong password.' }); 
    } else { 
    var token = jwt.sign(user, app.get('superSecret'), { 
    expiresInMinutes: 60 // expires in 4 hours 
    }); 


    var body = "hello world"; 
    res.writeHead(200, { 
    "Content-Length": body.length, 
    "Content-Type": "text/plain", 
    "x-access-token":token 
}); 


    res.end(); 
    console.log('token saved '+res.getHeader('x-access-token')); 

    } 

} 

}); 
}); 

вот полный проект project

ответ

1

Это не имеет смысла. Ответ http имеет ровно один код состояния. Это также ваши данные JSON с статусом 200 или статусом 302 с установленным заголовком местоположения. Это просто не может быть и то, и другое. Выбери один.

Если вы хотите, вы можете перенаправить местоположение в свой ответ JSON и попросить клиента вручную перейти в это место перенаправления после обработки ответа JSON.

Вы можете поместить заголовок местоположения в ответ 200, если хотите, но браузер не будет автоматически следовать этому.

Кроме того, если этот запрос является вызовом Ajax из браузера, браузер не будет изменять страницу только потому, что вы отправляете ответ перенаправления. Ваш код, который получает вызов Ajax, должен будет изменить страницу.

Кроме того, res.json(...) немедленно отправляет ответ, поэтому вы не можете больше написать после отправки.

0

Попробуйте, это работает для меня ...

res.writeHead(200, { 
    "Content-Length": body.length, 
    "Content-Type": "text/plain", 
    "x-access-token":token, 
    "Location": "http://www.google.com" 
}) 
+0

Я пробовал, но сожалею, что его не произошло –

Смежные вопросы