У меня очень сложная проблема.Я только начал использовать JWT .Я делаю логин и отправляю токен как JSON-ответ клиенту.Я сохраняю это в sessionStorage , а затем хочу использовать токен для доступа к защищенному маршруту , который в основном должен видеть пользователь при входе в систему.
Проблема в том, что я должен также как-то отправить токен в заголовке 1018 * с клиента между ними.Прямо сейчас я просто делаю window.location.pathname = '/LimeLINE/chatroom'
по этому маршруту.
Я чувствую, что для этого должен быть дополнительный шаг , например get на клиенте ?
Итак, шаг 1, войдите на клиент:
// Login POST
$('#frm-login').submit(function (e) {
event.preventDefault()
$('button').text('Please wait ...').prop('disabled')
$.ajax({
url: "/login-user",
type: "POST",
data: $('#frm-login').serialize(),
dataType: "json"
}).always(function (response) {
$('button').text('Logging in').prop('disabled')
console.log("Login", response)
if (response.status == "error") {
$('button').removeClass('lime').addClass('red').text('Log in failed. Try again.');
return
}
//console.log(response)
const token = response.token;
sessionStorage.setItem(token, token);
window.location.pathname = '/LimeLINE/chatroom'
})
})
Итак, шаг 2, войдите на сервер:
/********************* LOGIN *********************/
app.post('/login-user', (req, res) => {
user.loginUser(req.body, (err, jResult) => {
if (err) {
return res.send(jResult)
}
let token = jwt.sign({
user: jResult,
}, "supersecret", (err, token) => {
if (err) {
return res.statusCode(500)
}
})
console.log(token)
return res.json({
token: token
})
//add other headers here...
})
})
и защищенный маршрут:
// ********************* MAIN PAGE *************************
app.get('/LimeLINE/chatroom', verifyToken, (req, res) => {
jwt.verify(req.token, "supersecret", (err, authData) => {
if (err) {
return res.status(403).json({
message: "No token found"
});
} else {
try {
var sMainHtml = fs.readFileSync(__dirname + '/html/main.html', 'utf8')
} catch (e) {
console.log(e)
return res.sendStatus(500)
}
return res.send(sMainHtml);
/*return res.json({
authData
});*/
}
})
})