前两天面试,面试官问我后端是如何通过 token 拿到用户信息的,我说先查 token 是否失效,然后根据 token 查 userId 但我应该是回答错了,然后我上网搜答案,搜出来的也千奇百怪,还有说前端可以根据 token 直接拿到用户信息的,有没有后端大佬指教以下,后端生成 token 和验证并使用 token 的流程 PS:我是前端
1
mooyo 2023-03-19 22:47:51 +08:00
JWT token 可以直接把 userID 啥的非敏感信息塞进去方便拿出来,不过怎么设计都可以吧 没啥绝对的对和错。
|
2
renmu 2023-03-19 22:51:59 +08:00 via Android
如果是 jwt ,那直接 base64 解码 payload 就可以了。
|
3
ila 2023-03-20 07:59:13 +08:00 via Android
后端编码了个人信息成 token,返回给前端,
前端带着 token 请求后端, 后端解码 token,得到信息。 |
4
PerFectTime 2023-03-20 08:26:22 +08:00
jwt 的 jti 是用户 id 或者与用户 id 有关的数据,直接查就好了
|
5
kongkx 2023-03-20 09:01:15 +08:00 via iPhone
个人觉得这个问题问得很含糊,没有上下文无法作答。前端面试,可能问的是前后端数据传递吧,比如后端是如何获取 token 的?
|
6
chunkingName OP @kongkx 不是 他问的就是后端如何根据 token 拿到用户信息的,可能他想听到的答案就 jwt 吧
|
7
connectError 2023-03-20 09:24:52 +08:00
@chunkingName #6 最近在学习前后端分离的项目,后端在校验用户登录时候,如果校验成功,一般根据用户的 ID 生成一个 token 返回给前端,在后续访问时候前端页面携带 token 访问对应接口就行了,这样前端并不需要关心后端的具体校验规则啥的(尽量描述简单省略了权限校验)。
|
8
xuelu520 2023-03-20 09:29:23 +08:00
jwt 就直接 base64 解了,不是的话,就是 redis 等 nosql 来取用户数据了
|
9
sss15 2023-03-20 09:58:38 +08:00
我们为了防止中间人攻击,在 jwt 里放的是一串 uuid ,然后 uuid 作为 key 在 redis 里存放了真实的用户信息
|
10
dengshen 2023-03-20 10:07:00 +08:00
前端还问怎么解 token! !!
|
11
luckyrayyy 2023-03-20 10:32:32 +08:00
token 和 jwt 有啥关系,这不是两种方式么。token 是用户登录的时候,把用户 id 或者一些其他信息放在一起编码后返回给前端的。前端能不能解析看你怎么设计的编码方式,如果直接明文的自然前端也可以拿到用户信息。
|
12
kongkx 2023-03-20 10:50:13 +08:00 via iPhone
@chunkingName 我只是觉得他问得不好,没别的意思。 简单的说就是 key:value 但中间怎么走花样多得去了。 各种 encode encrypt gateway proxy db 想怎么吹都行
|
13
IvanLi127 2023-03-20 12:30:12 +08:00 via Android
token 种类那么多,流程都能出来好多版本,这问题没其他上下文的话,确实很配一堆乱七八糟的答案。。。
光签发 token 的地方就能有好多种,他这问题最简单的答案就是 op 说的,后端提取到 token ,查映射关系找到用户信息,然后读取用户信息。怎么提取,怎么查关系,从什么地方读用户信息都有可能,看具体实现。 |