- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习 Web 应用程序,刚刚开始使用 jwt 身份验证。
我了解一般流程。后端如何创建 jwt token 以及前端如何检索在每个后续请求中传递的 token 。
但是在每个在线教程或 YouTube 教程视频中都提到我们需要签名来创建 token ,其中包含只有客户端知道的 key 。但在所有前端教程中,他们都发送不记名 token ,但未显示 secret key 的使用。
有人可以告诉我如何将 key 和 token 一起传递到服务器吗?
最佳答案
好吧,让我们先了解jwt身份验证的过程,首先,一旦用户第一次登录,后端服务器就会在后端生成 key ,后端服务器会检查用户是否存在,并在登录请求的响应中,服务器使用密码和与用户相关的唯一信息(通常是用户ID和 token 过期的时间验证)对 token 进行编码
const payload = {
sub: user.id,
exp: moment().add(EXPIRATION_DAYS_NUMBER, CONSTANTS.TIME_UNITY).unix()
}
let token = jwt.encode(payload, CONSTANTS.JWT_SECRET)
一旦 token 被编码,服务器将其发送到登录请求的响应中,客户端捕获此 token 并将其存储在本地存储中,客户端现在应该使用 token 进行与服务器的任何 future 通信,在每个需要身份验证的http调用中需要身份验证,我们在 header 中发送 token ,以便服务器将检查中间件中的 header 并使用相同的 JWT_SECRT 解码 token 以了解它是否是有效 token
middelware(req,res,next)
let token = req.headers.authorization
let payload = jwt.decode(token, CONSTANTS.JWT_SECRET)
user.findOne({ id: payload.sub }).exec((err, user) => {
if (err) return res.forbidden('not authorized')
next()
})
在客户端,我们可以使用 Angular 拦截器在 header 中设置 token ,以便与服务器进行所有通信
import { Injectable } from '@angular/core';
import {
HttpRequest,
HttpHandler,
HttpEvent,
HttpInterceptor
} from '@angular/common/http';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class TokenInterceptor implements HttpInterceptor {
constructor( {}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
request = request.clone({
setHeaders: {
Authorization: `Bearer localstorage.getItem(token)}`
}
});
return next.handle(request);
}
}
并将拦截器作为提供者注入(inject)到 app.module
关于node.js - 如何使用 JWT 将 key 从前端( Angular 4)传递到后端( Node js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51016183/
我想通过将帧划分为 8x8 子 block 并将当前帧的每个 block 与前 10 帧的相邻 block 进行比较,从前 10 帧中找到运动矢量。 我可以用单帧进行操作,但我觉得很难处理 N 帧。
我正在尝试从数据库中选择一个随机条目,但仅从最新的 100 个条目中选择。有什么想法吗?谢谢。 最佳答案 对于 MySql - SELECT * FROM (SELECT * FROM tabl
我有一个表格,其中包含职位状态。表列是: ID //which is unique incremental Post_id //liked post user_id //user
使用 Laravel Eloquent,如何从前 100 行中随机抽取 10 行(按日期排序)。 例如,我有这个: $comments = Comment::orderBy('created_at',
数据是pandas系列:我正在使用df.B=df.A.str.extract(r'')使用提取的 WHERE 单词创建 B 列df: A HI my lines are so super WHERE1
我正在使用下面的脚本从前 24 小时中提取数据并将其输出到一个 html 表中,它在 8 月的整个月都有效,但自从月份更改为 9 月后就搞砸了,现在显示第一个数据入口.. 我的“时间戳”列是 varc
最近学习了Git的基本概念。我们确实使用了一些 git-svn 来熟悉它的使用。我想和我的 friend 一起在 git 上开始我的第一个“真正的”项目。 因此我想问一下您一般使用 Git 的最佳实践
我正在编写一个脚本,我需要在标签上提取 id 中可用的值,我需要使用纯 Javascript 来完成此操作。我有类似的 jQuery 代码可用,但我无法成功完成 Javascript 代码。我的 jq
我有这个查询来选择记录号 49 和 50 SELECT id,date FROM table WHERE enabled=1 ORDER BY id DESC LIMIT 2 OFFSET 48 现在
我是一名优秀的程序员,十分优秀!