首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Adonis.js中,为什么refreshToken为空?

在Adonis.js中,为什么refreshToken为空?
EN

Stack Overflow用户
提问于 2019-10-14 09:14:08
回答 2查看 861关注 0票数 0

我正在学习Adonisjs,并想在我的api rest中实现注销部分,但由于请求中请求了注销refresh_token,所以我无法实现,但我不知道此refresh_token从何而来。我注意到当我登录时,我得到了一个"requestToken“参数,但无论如何它都是空的

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

代码语言:javascript
复制
   {
      "type": "bearer",
      "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjEsImlhdCI6MTU3MTAxNTAwMH0.xXX6oDvdvdz59UJ2fstrFmOJEGP8luwKPtTeVF-Y224",
      "refreshToken": null
    }

代码如下:

代码语言:javascript
复制
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“中得到响应的令牌,但它返回无效令牌:

代码语言:javascript
复制
{
  "error": "Invalid refresh token"
}

那么,我该如何解决这个问题呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-14 09:25:19

根据adonis文档,遵循此api调用-它在登录身份验证流程期间生成刷新令牌

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

代码语言:javascript
复制
await auth
  .withRefreshToken()
  .attempt(uid, password)

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

票数 5
EN

Stack Overflow用户

发布于 2021-10-15 18:47:47

我尝试使用示例示例作为文档https://legacy.adonisjs.com/docs/4.0/authentication#_jwt中的ref,但不起作用。得到

代码语言:javascript
复制
await auth.withRefreshToken().attempt(uid, password)

输出

代码语言:javascript
复制
     {
       "type": "bearer",
       "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjEsImlhdCI6MTU3MTAxNTAwMH0.xXX6oDvdvdz59UJ2fstrFmOJEGP8luwKPtTeVF-Y224",
       "refreshToken": null
     }

相反,请使用以下代码

代码语言:javascript
复制
   if (await auth.attempt(uid, password)) {
       const savedUser = await User.findBy("uid", uid);
       await auth.withRefreshToken().generate(savedUser);
    }

输出

代码语言:javascript
复制
 {
   "type": "bearer",
   "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aWQiOjEsImlhdCI6MTYzNDMyMjc2MywiZXhwIjoxNzIwNzIyNzYzLCJpc3MiOiJpc3MifQ.mj48h77eQQZfn7TjqyW_HDv5AIaTGtTabbID3J2Tnqw"
   "refreshToken": "d62308224c28a1569b0381c3f2f5b29fORSRBIdsHgfqHsqC+0RJQ3OCNZ/8/XW1NEq4AtEQTUfYonzodsqLUAy+e2sHsjIz"
 }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58368997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档