Javascript 如何在成功登录后向标头添加JWT
我正在使用Symfony 4构建一个web应用程序,并尝试将后端实现为REST API 作为登录过程的一部分,我创建了一个端点,在接收到有效的用户名和密码时返回JWT。然后,我将JWT保存到浏览器中的本地存储,如下所示:Javascript 如何在成功登录后向标头添加JWT,javascript,rest,api,symfony,authentication,Javascript,Rest,Api,Symfony,Authentication,我正在使用Symfony 4构建一个web应用程序,并尝试将后端实现为REST API 作为登录过程的一部分,我创建了一个端点,在接收到有效的用户名和密码时返回JWT。然后,我将JWT保存到浏览器中的本地存储,如下所示: $(document).ready(function() { $('.js-login-form').submit(function (e) { e.preventDefault(); let username = $('#_username').val()
$(document).ready(function() {
$('.js-login-form').submit(function (e) {
e.preventDefault();
let username = $('#_username').val();
let password = $('#_password').val();
let data = JSON.stringify({_username: username, _password: password});
$.ajax({
method: 'POST',
url: '/api/tokens',
contentType: "application/json",
dataType: 'json',
data: data,
success: function(data) {
localStorage.setItem('token', data.token);
// Add Header to the request Authorization: "Bearer " . data.token
window.location='/app';
},
error: function(jqXHR) {
var errorData = JSON.parse(jqXHR.responseText);
console.log(errorData);
}
});
});
});
我的问题是如何将JWT添加到头中,以便将用户重定向到密码保护区域。然后,我的守卫验证器将相应地验证令牌
非常感谢您的意思是将JWT添加到后端的标题中吗? 如果是,您可以创建中间件来检查用户是否经过身份验证。 例如:
// add jwt module
const jwt = require('jsonwebtoken');
async function isAuthValid(req,res,next) {
try {
// check header
let token = req.headers['authorization'];
if (token.startsWith('Bearer ')) {
// check token type
token = token.slice(7, token.length).trimLeft();
} else {
return res.send('wrong token type');
}
if (token) {
// ? check token
let verifiedUser = await jwt.verify(token, 'somesecret', (err, decoded) => {
if (err) {
return res.send(err.message);
} else {
return decoded
}
});
req.authUser = verifiedUser
next();
}
} catch (err) {
return res.send('no token provided');
}
}
module.exports = isAuthValid
在您的路线上注册为中间件
const express = require('express');
const isAuthValid = require('./checkAuthUser.js');
const app = express();
app.get('/myRoute', isAuthValid, (req,res) => {
return res.send('protected endpoint')
});
看来你有足够的声誉添加评论。如果你有什么要澄清的,请在问题上加上评论。把所有问题都回答好,然后到这里来,给出一个彻底的答案。