我有一个名为登录的组件,我正在考虑以下内容......
这是我的 onSubmit 函数,它在提交登录表单时执行并解析来自服务器的响应。
onSubmit (e) {
fetch (`http://localhost:3000/api/users/login/${this.state.username}/${this.state.password}/`, {
method: 'POST'
})
.then(res => res.json())
.then(res => {
if (res.success) {
console.log('ok');
}
});
}
例如,如果他在哪里console.log('ok');
,我想创建一个持续 1 小时的 cookie,然后知道如何在 cookie 处于活动状态时在其他组件中进行验证,从而允许访问仪表板或发送它到登录。我不知道这是否是正确的方法,我阅读了一些 JWT,但对于新手来说这是非常困难的,事实是这个站点不需要太多的安全性。你建议我做什么?
Cookie 在服务器上创建并发送到客户端,因此每个请求都会隐式发送。
快速登录示例:
注意:需要安装中间件
cookie-parser
和cookie-session
`.推荐的方法是将信息直接存储在内存中。
注意:需要安装中间件
cookie-parser
和express-session
`.通过这种方式,会话数据存储在内存中,而不是像前面示例中那样存储在 cookie 中。这里唯一存储在 cookie 中的是用户的会话 ID。
添加会话中间件后,当用户登录并触摸对象
session
时,request
他们的会话将开始。在这种情况下,您使用 cookie 就足够了。另一方面,JWT 并不难,它实际上很简单,它只包括创建一个令牌并将其发送给客户端,就像使用 cookie 一样,所以在每个请求中,这个令牌都会发送给服务器。
JWT 是一个开放标准 ( RFC 7519 ),它定义了一种在两方之间进行通信的安全方式。该标准的重要性在于共享的信息是数字签名的,这意味着重要的安全性。事实上,JWT 可以使用经典算法
HMAC
或使用密钥进行签名RSA
。当使用 JWT 时,授权存储在客户端中,通常在
localStorage
向服务器发出的每个请求中,它在Authorization
带有 value的标头中发送Bearer <token>
。以下示例使用 模拟登录
jsonwebtoken
。首先,我们创建一个创建令牌的函数:
其次我们进行登录,如果成功,则生成令牌并发送给客户端:
当用户访问任何资源(无论是 API 还是其他)时,都会对标头中隐含的令牌进行解码
Authorization
和比较。为此,我们可以实现一个在每个请求中执行此操作的中间件。当令牌过期时,令牌不会在请求中发送,中间件会重定向到
/login
.JWT 的一些优点是: