首页 > 解决方案 > 使用 JWT ,如何设置并使用它进行身份验证?

问题描述

示例场景:-

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

我知道的基本事情是,当 JWT 被发送回服务器时,它通常设置在 Authorization 标头中。

我想要的是 :-

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

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

如下所示:-

app.post('/user/login' , authMiddleware , async (req , res) => {
 res.redirect('/user/createTask')
 }

假设 /user/createTask 期待 jwt ,它将在让用户进入路由之前对其进行验证。

那么在 authMiddleware 中必须有什么,以便 jwt 在客户端的本地存储或某处设置,然后在 Authorization 标头中取回它。

如果客户端有事情要做以使其工作,请也提出建议。这整个场景将如何运作?

标签: node.jsexpressauthenticationjwtserver-side-rendering

解决方案


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

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


推荐阅读