对前端传过来的token进行解析,获取用户信息

node对前端传过来的token进行解析,shiyong使用jsonwebtoken

1.使用jsonwebtoken

下载:

npm install jsonwebtoken

2.使用jsonwebtoken

jwt.sign(payload, secretOrPrivateKey, [options, callback])

参数说明:

payload 可以是表示有效 JSON 的对象文本、缓冲区或字符串。(一般是用户信息,解析之后可以看到信息,建议生token的时候剔除用户敏感信息,例如登录密码)

secretOrPrivateKey 是一个字符串(utf-8 编码)、缓冲区、对象或 KeyObject,其中包含 HMAC 算法的密钥或 RSA 和 ECDSA 的 PEM 编码私钥。如果私钥带有密码,则可以使用对象 { key, passphrase } (基于加密文档),在这种情况下,请确保通过该 algorithm 选项。使用 RSA 算法签名时,最小模长度为 2048,除非 allowInsecureKeySizes 选项设置为 true。低于此大小的私钥将被拒绝并显示错误。

简单来说:他就一个密钥,可以自己定义,在一个文件定义好之后,在需要的地方,调用它

options:

algorithm (默认值: HS256

expiresIn :以秒或描述时间跨度的字符串表示 vercel/ms。

例如: 60"2 days" "10h" "7d" 。数值被解释为秒计数。如果使用字符串,请确保提供时间单位(天、小时等),否则默认使用毫秒单位( "120" 等于 "120ms" )。

同步签名

// sign with RSA SHA256
var privateKey = fs.readFileSync('private.key');
var token = jwt.sign({ foo: 'bar' }, privateKey, { algorithm: 'RS256' });

异步签名

jwt.sign({ foo: 'bar' }, privateKey, { algorithm: 'RS256' }, function(err, token) {
  console.log(token);
});

个人代码例子

  const user = {
      ...results[0],
      password: "",
      imageUrl: "",
      create_time: "",
      update_time: "",
    };
    // 设置token的有效时长
    const tokenStr = jwt.sign(user, ‘密钥’, {
      expiresIn: "7h",
    });
	res.send({
      results: results[0],
      status: 0,
      message: "登录成功",
      token: "Bearer " + tokenStr,
    });

注意:这里为了规范,我返回的token是加了“Bearer ”并且带有空格

接下来是重点

为什么前端返回的token和后端node返回的token一模一样,调用jwt**.**decode

为什么jwt**.**decode(token)返回得到是null

注意:这里我生成和解析token使用的都是jsonwebtoken

原因:因为node后端生成的token是一个字符串,不带有Bearer ,把jwt**.**decode(token)中token去除Bearer

具体上代码

exports.getRoute = (req, res) => {
  const token = req.headers.authorization;
  const tokens = token.split(" ")[1];
  const decoded = jwt.decode(tokens);
  let identity = decoded.identity;
  let identityRoute = null;
  if (identity == "用户") {
    identityRoute = userRoute;
  } else if (identity == "产品经理") {
    identityRoute = productRoute;
  } else {
    identityRoute = doctorRoute;
  }
  res.send({
    status: 0,
    identityRoute: identityRoute,
  });
};
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值