Node.js 使用JWT时,如何设置并使用它进行身份验证?

Node.js 使用JWT时,如何设置并使用它进行身份验证?,node.js,express,authentication,jwt,server-side-rendering,Node.js,Express,Authentication,Jwt,Server Side Rendering,示例场景:- 我在前端使用HTML和JS。 对于后端,我使用Express。 对于身份验证,我使用JWT 我知道的基本情况是,当JWT发送回服务器时,通常在授权头中设置JWT 我想要的:- 让我们假设客户端请求post/user/login路由通过表单提供其凭证。Auth中间件将验证凭据,并使用一些负载生成jwt令牌 我的问题从这里开始,如何在客户端设置这个jwt,并在将用户导航到经过身份验证的页面时将其返回到标题中,我希望用户在成功登录时重定向到该页面 如下所示:- app.post('/us

示例场景:-

我在前端使用HTML和JS。 对于后端,我使用Express。 对于身份验证,我使用JWT

我知道的基本情况是,当JWT发送回服务器时,通常在授权头中设置JWT

我想要的:-

让我们假设客户端请求post/user/login路由通过表单提供其凭证。Auth中间件将验证凭据,并使用一些负载生成jwt令牌

我的问题从这里开始,如何在客户端设置这个jwt,并在将用户导航到经过身份验证的页面时将其返回到标题中,我希望用户在成功登录时重定向到该页面

如下所示:-

app.post('/user/login' , authMiddleware , async (req , res) => {
 res.redirect('/user/createTask')
 }
假设/user/createTask需要jwt,它将在允许用户进入路由之前验证jwt

那么authMiddleware中必须包含什么,以便在客户端本地存储或其他地方设置jwt,并将其返回到授权头中

如果客户端需要做一些事情来让它工作,请也提出建议。
整个场景将如何工作?

如果您通过表单发送凭据,则在发送重定向响应时将无法捕获响应。重定向将由浏览器处理,您的JS将无法访问您在响应中发送的任何内容


要使此场景正常工作,您必须通过javascript调用
post/user/login
端点。然后您可以从服务器接收响应。从中读取任何标记(例如,可以在响应主体中),在存储中的某个位置设置标记,然后调用
/user/createTask
端点。如果您想使用在
授权
头中发送的JWT,则必须通过javascript调用所有端点。浏览器无法向请求添加
授权
标题。您可以将令牌存储在cookie中(来自登录的响应可以设置cookie),然后浏览器会将cookie与请求一起发送。

例如,如果我使用let say xhr request发送表单数据,则响应将显示为ar xhr response(可能是一些具有令牌的json数据),然后,在将该令牌设置到本地存储之后,我将如何发送带有授权标头的get请求,并让浏览器呈现请求的页面?我在这里也感到困惑,我将如何在xhr响应中调用/user/createTask端点?如果从xhr发送任何请求,我无法对该路由进行服务器端渲染。您可以在xhr响应中调用任何javascript代码,这样您就可以拥有发出另一个xhr请求(到createTask端点)的代码。当处理createTask方法的响应时,可以使用从服务器获得的任何html更新DOM。或者,您可以使用
window.location
从javascript重定向用户,然后浏览器将从您的服务器提供响应。但在这种情况下,您将无法使用
授权
标题。因此,我从这里得到的是,无法使用xhr请求同时设置
授权
标题和重定向到特定的
视图
。我可以在父请求的响应中调用另一个api,但我不能使用该api呈现页面。我必须从该api发送一些数据。基本上是的-您要么发出xhr请求并接收数据(Javascript接收该数据),要么在浏览器中发出常规请求,使浏览器呈现新页面(基于响应)。当您发出xhr请求时,您可以返回HTML并让Javascript将其注入当前页面(或交换页面的某些部分)。它不必是JSON格式的数据。