- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个全栈项目,用户可以在其中创建帐户、访问他们的个人资料、创建博客、阅读他们的博客、删除他们的博客等。为了执行所有这些任务(注册和登录除外),用户必须待验证。
我已经完成了后端,但我不明白如何将 jsonwebtoken 从客户端发送到服务器端(我知道如何从服务器端发送它)。我知道如何从服务器获取 token 并将其存储在浏览器的 locaStorage 中,但当我请求阅读博客或删除博客或在阅读完所有内容后访问我的个人资料时,我不知道如何将它们发送回服务器我的博客。
如果我这样做 -
window.location.href = "/blogs";
那么我将无法发送身份验证 token ,或者我应该说我不知道如何使用这种方法发送身份验证 token 。
在堆栈溢出上,我读到了有关此技术的内容 -
window.location.href = "/blogs?token=";
但我不认为开发人员在他们的项目中使用这种技术,因为据我所知, token 应该通过 header 发送。
如果我总结我的问题,我只想知道如何将身份验证 token 发送到服务器以及更改不同路由的页面,例如显示我所有博客的不同页面和仅显示我的个人资料的另一个页面。如果未经身份验证的其他人尝试访问个人资料路由或博客路由,将会收到 401 错误。
如果有人可以解决我的困惑或向我推荐一本可以解决我的困惑的书或文章,那将是一个很大的帮助。
最佳答案
我会尽量让它变得简单。作为示例,我将使用我的一个项目中的代码。
首先,您没有解释如何在服务器端检查和验证 token 。因此,为了使说明更加完整,我将提供一些代码。
在服务器端,我使用一个简单的函数来检查收到的每个请求,并根据验证和确认过程,我将更新收到的请求,然后将其发送到解析器。
注意:当前代码使用 Express
在我的示例中,我将 token 存储在请求 header Authorization
字段中。
const isAuth = async (req, res, next) => {
const authHeader = req.get('Authorization');
// if is no authorization field in header, we call
if (!authHeader) {
req.isAuth = false;
return next();
}
const token = authHeader.split(' ')[1]; // `Bearer XXXXXXXXXXXXXXXXXXXXX...`
if (!token) {
req.isAuth = false;
return next();
}
// Here i decode the token
const decodedToken = jwt.verify(token, 'SomeSecretWord');
req.isAuth = true;
return next();
}
对于收到的每个请求,我们检查 header 是否包含授权 token ,如果是,我们会验证并验证 token 。如果验证成功完成,我会更新请求内的 isAuth
字段并将其设置为 true。
app.use(isAuth);
现在您将能够访问解析器内的 isAuth
并根据其值返回数据(例如:如果为 false,则抛出错误);
现在,对于客户端来说,由于我们希望 token 存储在 headers Authorization 字段中,因此我们需要在发送请求之前设置它。
确保已将 token 保存在客户端。就我而言,用户需要登录才能接收新 token ,以便将新创建的 token 存储在客户端存储中。现在,在发送每个请求之前,从存储中访问 token 并用它更新请求 header 。
const headers = {
Authorization: "Bearer XXXXXXXXXXXXXXXXXXXXXX",
};
const reqInit = {
method: 'GET',
headers: headers,
};
// send request using fetch
fetch('/someLocation', reqInit)
...
我在这里遇到的问题是在用户 session 请求之间存储 token 。
最简单、安全的方法是将其保存在本地或 session 缓存中(根据谷歌经过小型研究后得出的结论)并在每个请求时访问它。在服务器端创建 json Web token 时,您可以指定过期时间,因此如果 token 在一段时间内未使用,它将无效,用户需要重新进行身份验证才能接收其他 token 并将其保存在客户端存储中.
经过一番研究,我决定用 graphql 重写我的后端(apollo-server/express) 用于服务器端,apollo-client 用于客户端。由于 apollo-client 提供了一个库来管理客户端的本地缓存,因此它简化了任务。
我希望我已经回答了您的问题,这可以帮助您,如果我犯了错误,我们深表歉意。
关于javascript - 如何从前端处理 jsonwebtoken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57839879/
1. HTML 结构 1.1 HTML 文件基本结构 第一个html程序 hello world! html 标签是整个 h
文件上传三种方案:1. form表单上传,2. iframe,3. FormData,base64上传文件,二进制流上传文件,二进制流下载文件。异步上传,大文件上传--切片:拆分上传请求断点续传显示上
1. HTML 结构 1.1 HTML 文件基本结构 第一个html程序 hello world! html 标签是整个 h
uniapp作为开发移动端的前端框架,目前国内是非常流行的,使用HbuilderX开发工具基于uniapp框架开发的系统可以方便的转换为小程序、APP等移动端程序,大大降低了移动开发的成本。网络
今天我们来复盘一下前端中css伪元素的知识以及如何用css伪元素来减轻javascript的压力,做出一些脑洞大开的图形。 预备知识 伪元素 伪元素是一个附加至选择器末的
今天给大家分享一些实用的JS代码片段,有需要的朋友欢迎收藏! 1、获取浏览器的版 functiongetBrowser(){ varUserAgent=navigator.us
1 . Wappalyzer 全球用户数:1,000,000+ Wappalyzer可以帮助我们了解目标网站的构建方式。工作当中存在大量此类情况,客户需要我们参照某些网站
在管理后台中我们会使用大量的表格表单组件, 导入导出各种报表, 有些场景还需要对报表数据进行可视化分析, 动态生成可视化图表, 笔者将基于以上场景, 总结一些实用的 Table 组件开发技巧,
3D动画效果现在越来越普及,已经被广泛的应用到了各个平台,比如阿里云,华为云,webpack官网等。它可以更接近于真实的展示我们的产品和介绍,带来极强的视觉冲击感。所以说,为了让自己更加优秀,c
QShop商城-快速开始-前端 工具准备 NodeJs 前端环境为NodeJs,下载地址:http://nodejs.cn/download/current/ 。 默认会用版
1. 初始JavaScript 1.1 什么是 JavaScript JavaScript (简称 JS) 是世界上最流行的编程语言之一 是一个脚本语言, 通过解释器运行 主要在客户端(浏览器)上运行
1. WebAPI 背景知识 1.1 什么是 WebAPI JS 分成三个大的部分: ECMAScript: 基础语法部分 DOM API: 操作页面结构 BOM API: 操作浏览器 WebAPI
1. WebAPI 背景知识 1.1 什么是 WebAPI JS 分成三个大的部分: ECMAScript: 基础语法部分 DOM API: 操作页面结构 BOM API: 操作浏览器 WebAPI
1. 初始JavaScript 1.1 什么是 JavaScript JavaScript (简称 JS) 是世界上最流行的编程语言之一 是一个脚本语言, 通过解释器运行 主要在客户端(浏览器)上运行
有没有办法从页面访问 tomcat 服务器日志?如果有一些方法或实现可以做到这一点...... 最佳答案 PSI Probe可以列出您的 Tomcat 日志文件并显示它们的内容。您可以采用相同的方法,
我想知道是否有一些很好的免费网站性能分析工具,特别是前端。这主要是关于Javascript的。 现有工具(例如 Google Pagespeed)的问题在于它不适用于我的应用程序。在进入我的应用程序之
我曾经遇到一个 MySQL 前端应用程序,它在父行中显示外部链接行,例如,如果 Client 表有一个指向 Suburb 表的外键: (来源:vb123.com) 您知道可以执行此操作的任何前端吗?
我正在建立一个带有管理区域的网上商店来管理产品。在管理区域中,所有产品都是可见的,但在网上商店中,只有数据库表中标记为 active = 1 的产品是可见的。 我正在使用 Silex 并将存储库注册为
有可能在 C# 中制作 GUI,但在 C 或 C++ 中制作实际程序。 比如说我想制作一个聊天应用程序。我希望界面在 C# 中。但我想用 C 编写所有实际代码。这可能吗? 我找到了 http://ww
对于我自己的教育,我很好奇编译器使用哪个 C++ 前端和后端。您能告诉我以下技术在哪里使用以及它们有哪些标志/优势(如果有的话)? Open64 - 它是后端、前端还是两者兼而有之?哪些编译器使用它?
我是一名优秀的程序员,十分优秀!