【问题标题】:In Adonis.js Why refreshToken is null?在 Adonis.js 为什么 refreshToken 为空?
【发布时间】:2019-10-14 01:14:07
【问题描述】:

我正在学习 Adonisjs 并想在我的 api rest 中实现注销部分,但我不能因为每当我将注销时,请求中都会请求 refresh_token,但我不知道这个 refresh_token 来自哪里。我注意到,当我登录时,我得到一个“requestToken”参数,但无论如何它都是空的

当我登录时,它会工作并返回类似的东西给我:

   {
      "type": "bearer",
      "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjEsImlhdCI6MTU3MTAxNTAwMH0.xXX6oDvdvdz59UJ2fstrFmOJEGP8luwKPtTeVF-Y224",
      "refreshToken": null
    }

代码如下:

async login ({ request, auth }) { 
    const { email, password } = request.all()

    const token = await auth.attempt(email, password)

    return token
}

async logout({ request, response}) {
    const rules = {
      refresh_token: 'required'
    };

    const { refresh_token } = request.only(['refresh_token']);

    const validation = await validate({ refresh_token }, rules);

    const decrypted = Encryption.decrypt(refresh_token);

    if (!validation.fails()) {
      try {
        const refreshToken = await Token.findBy('token', decrypted);
        if (refreshToken) {
          refreshToken.delete();
          response.status(200).send({ status: 'ok' });
        } else {
          response.status(401).send({ error: 'Invalid refresh token' });
        }
      } catch (err) {
        response.status(401).send({ error: err.toString()});
      }
    } else {
      response.status(401).send(validation.messages());
    }

  } 
}

我尝试查看一些 git api 甚至 adonisjs 身份验证文档,但无济于事。

我也尝试添加请求“request_token”中回答的令牌,但它返回无效令牌:

{
  "error": "Invalid refresh token"
}

那么,我该如何解决呢?

【问题讨论】:

    标签: node.js adonis.js


    【解决方案1】:

    按照 adonis doc,按照这个 api 调用 - 在登录期间生成刷新令牌 - 身份验证流程

    指示 JWT 身份验证器也生成刷新令牌:

    await auth
      .withRefreshToken()
      .attempt(uid, password)
    

    参考:https://adonisjs.com/docs/4.1/authentication

    【讨论】:

      【解决方案2】:

      我尝试将示例示例用作文档https://legacy.adonisjs.com/docs/4.0/authentication#_jwt 中的参考,但没有奏效。得到了

      await auth.withRefreshToken().attempt(uid, password)
      

      输出

           {
             "type": "bearer",
             "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjEsImlhdCI6MTU3MTAxNTAwMH0.xXX6oDvdvdz59UJ2fstrFmOJEGP8luwKPtTeVF-Y224",
             "refreshToken": null
           }
      

      改用这个

         if (await auth.attempt(uid, password)) {
             const savedUser = await User.findBy("uid", uid);
             await auth.withRefreshToken().generate(savedUser);
          }
      

      输出

       {
         "type": "bearer",
         "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjEsImlhdCI6MTYzNDMyMjc2MywiZXhwIjoxNzIwNzIyNzYzLCJpc3MiOiJpc3MifQ.mj48h77eQQZfn7TjqyW_HDv5AIaTGtTabbID3J2Tnqw"
         "refreshToken": "d62308224c28a1569b0381c3f2f5b29fORSRBIdsHgfqHsqC+0RJQ3OCNZ/8/XW1NEq4AtEQTUfYonzodsqLUAy+e2sHsjIz"
       }
      

      【讨论】:

        猜你喜欢
        • 2017-04-30
        • 2020-02-12
        • 1970-01-01
        • 2015-10-01
        • 1970-01-01
        • 2013-10-30
        • 2015-06-30
        • 2016-07-11
        • 2012-12-17
        相关资源
        最近更新 更多