微信小程序redis缓存token不成功

发布于 2022-09-05 21:18:17 字数 3088 浏览 13 评论 0

  1. 我想实现小程序登录功能,用取得的seesion_key和openId生成一个token放进redis中
  2. 代码如下,redis存数据那步不能成功
app.get('/onLogin',function(req,res,next){
  console.log("onLogin 接口访问成功")
  // console.log("req code",req)
  let JSCODE=req.query.code
  let hasToken=req.query.token

  let wechatUrl="https://api.weixin.qq.com/sns/jscode2session?appid="+appid+"&secret="+secret+"&js_code="+JSCODE+"&grant_type=authorization_code"
  let grant_type='authorization_code'
  // console.log(JSCODE)
  request(wechatUrl,(err,response,body)=>{
    // console.log(response)
    let data=JSON.parse(body)
    console.log(data)
    res.set({
      "Access-Control-Allow-Origin": "*"
      ,"Access-Control-Allow-Methods": "POST,GET"
      ,"Access-Control-Allow-Credentials": "true"
    });
    // res.json(data)
    // 存进redis  openid session_key

    // 如果没有带token参数,生成token
    //
    if(hasToken){
      jwt.verify(token, 'secrect', function(err, decoded) {
        console.log(decoded.openid) // bar
        //  验证登录状态
        let id=decoded.openid
        client.on("connect",function(){
          client.get("id",function(err,value){
            //  token过期或者其他问题
            if(err){
              // throw(err)
              let token=jwt.sign({
                name:data.openid,
                data:data
              })
              client.set("openid")

            }
            else{
              console.log("已经登录")
            }
          })
        })
      });

    }
    //token为空第一次登录,将token存入
    else{
      console.log("未携带token")
      let token=jwt.sign({
            name: data.openid,
            data: data
        }, "secrect", {
              expiresIn: 60 * 1
        })

      // 这里为何没有执行?
      client.on("ready",function(){
        console.log("client  连接成功222")
      })
      // 未执行
      client.on("connect",function(){
        console.log("connect success")
        client.set("test",token,redis.print)
        res.json({
          token:token
        })
      })
    }
    // res.json({
    //     result: 'ok',
    //     token: token
    // })
  })
})
  1. 这里为何没有执行,如果我把这句话放到全局中是可以打印出来的,我放到app.js中会打印出相关信息,也能正确操作,放到这个路由中就没有反应,为什么?
      client.on("ready",function(){
        console.log("client  连接成功222")
      })
  1. npm用的jsonwebtokenredis

jsonwebtoken中如果token过期了 jwt.verify还会验证通过么?如果我想让redis中token是否过期,是这样写么?

    if(hasToken){
      jwt.verify(token, 'secrect', function(err, decoded) {
        console.log(decoded.openid) // bar
        //  验证登录状态
        let id=decoded.openid
        client.on("connect",function(){
          client.get("id",function(err,value){
            //  token过期或者其他问题
            if(err){
              // throw(err)
              let token=jwt.sign({
                name:data.openid,
                data:data
              })
              client.set("openid")

            }
            else{
              console.log("已经登录")
            }
          })
        })
      });

    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文