教程中,『退出登录』逻辑不够严谨问题

教材中,『退出登录』的代码如下:

const logout = async (params = {}) => {
  let accessToken = wepy.getStorageSync('access_token')
  // 调用删除 Token 接口,让 Token 失效
  let logoutResponse = await wepy.request({
    url: host + '/' + 'authorizations/current',
    method: 'DELETE',
    header: {
      'Authorization': 'Bearer ' + accessToken
    }
  })

  // 调用接口成功,则清空缓存
  if (logoutResponse.statusCode === 204) {
    wepy.clearStorage()
  }

  return logoutResponse
}

这段代码逻辑不够严谨,问题如下:

  1. 获取的 accessToken 可能为空
  2. 获取的 accessToken 可能过期了
    以这两种情况下,去请求 DELETE authorizations/current (刷新和删除 token 这两个方法都需要提交当前的 token),由于是携带的是无效 accessToken,服务器将无法删除 Token,并且会报 500 错误。
    file

[@liyu001989](https://learnku.com/users/3995) [@Summer](https://learnku.com/users/1)

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 2
liyu001989

好的等我优化一下。

第二个问题,jwt-auth 只能在 refresh 的时候允许将 token invalidate,服务器就是应该报错,一个过期的 token 貌似就不需要 logout 了,前端应该处理一下。

5年前 评论

对的,过期的 token 不应该还请求后端 delete(也就不存在服务端报错了,哈哈),直接前端清除缓存退出即可

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!