Javascript 如何在成功登录后向标头添加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()

我正在使用Symfony 4构建一个web应用程序,并尝试将后端实现为REST API

作为登录过程的一部分,我创建了一个端点,在接收到有效的用户名和密码时返回JWT。然后,我将JWT保存到浏览器中的本地存储,如下所示:

$(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')
});

看来你有足够的声誉添加评论。如果你有什么要澄清的,请在问题上加上评论。把所有问题都回答好,然后到这里来,给出一个彻底的答案。