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

  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("已经登录")
            }
          })
        })
      });

    }
阅读 3.5k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题