前端401错误 & 解决方法:响应拦截器

目录

1.该问题出现的原因

2.处理401问题的解决方案原理

3.使用响应拦截器解决问题


1.该问题出现的原因

在前后端分离项目中,最常见的是前端点击登录后,后端返回token字符串,这个token可以看作是一个“令牌”,就比如你去酒店办理入住后,拿到的房卡,那代表你有着进去房间的权限。


1. 登录用户的token过期 

token是具有时效性的,生活中,如你登录腾讯视频,接下来几天你再登录就不用输入账号密码,而时间很长如半个月后,你还要重新输入账号密码登录,这个过程就是token过期。

具体多久过期,一般是和后端商量着来,后台管理类项目如企业内部的项目为了安全性且并不会过多的考虑用户体验,一般设为很短或者干脆不做这个。

而像腾讯视频,淘宝,京东之类的商业类项目需要考虑用户体验,且对于安全性要求并不高,一般设置为7~14天比较合适。


2. 用户未登录情况,返回401错误,应该回到登录页(这个不一定是401错误)


3.小结:很普遍的功能,80%的项目都会做这个功能


2. 处理401问题的解决方案原理


完整的逻辑为: 

 前端请求接口api --> 返回401错误 --> 前端判断是否有refresh_token -->如果有就用refresh_token请求新的token --> 后台成功返回一个新的token给我们 --> 更新vuex+本地存储持久化 --> 然后重新发送请求 --> 带上新的token请求数据

当然,如果没有refresh_token就老老实实去登录吧!



 

方案: 目前常见的处理方式是:当用户登陆成功之后,返回的token中有两个值


原理:一个是token,他的有效期是2小时(举例),一个是姑且称为refresh_token,他的有效期长,比如是14天,假设用户登录后2小时后,token过期了,那么我们看一下refresh_token在不在,在的话,就用refresh_token再次发送,后端会返回一个新的token。


核心点:1.解决401问题重点在于让用户“无感”,也就是说用户不知道token过期也不需要用户再次登录,需要的是我们程序员去处理。

               2.解决这个问题的地方在响应拦截器


3.使用响应拦截器解决问题


3.1 作用

所有从后端回来的响应都会集中进入响应拦截器中,如果发生401错误就可以解决

 

 


 

以下是我封装的响应拦截器(可以通用),主要完成两件事:

处理401问题,以及注入token

import router from '../router/auth.js'
 
 
// 响应拦截器
request.interceptors.response.use(function (response) {
  console.log('响应拦截器', response)
  return response
}, async function (error) {
  // 如果发生了错误,判断是否是401
  console.dir(error)
  if (error.response.status === 401) {
    // 出现401就在这里面 开始处理 ---
    console.log('响应拦截器-错误-401')
    const refreshToken = store.state.tokenInfo.refresh_token
    // if (有refresh_token) {       ---- 有refresh_token
    if (refreshToken) {
      // 1. 请求新token
      try {
        const res = await axios({
          url: 'http://localhost:8000/v1_0/authorizations',
          method: 'PUT',
          headers: {
            Authorization: `Bearer ${refreshToken}`
          }
        })
        console.log('请求新token', res.data.data.token)
        // 2. 保存到vuex
        store.commit('mSetToken', {   // mSetToken是前面定义的mutations名字
          refresh_token: refreshToken,
          token: res.data.data.token
        })
        // 3. 重发请求
        //    request是上面创建的axios的实例,它会自动从vuex取出token带上
        return request(error.config)
      } catch (error) {
        // 1. 清除token
        store.commit('mSetToken', {})  
        // 2. 去到登录页(如果有token值,就不能到login)
        const backtoUrl = encodeURIComponent(router.currentRoute.fullPath)
        router.push('/login?backto=' + backtoUrl)  
        return Promise.reject(error) 
      }
    } else {
       // 如果没有refresh_token的时候   ----没有refresh_token
      // 1.去到登录页
      // 2.清除token
      store.commit('mSetToken', {})
      const backtoUrl = encodeURIComponent(router.currentRoute.fullPath)  // 回到原来跳过来的的页面,不加?后面的一串就会到首页
      router.push('/login?backto=' + backtoUrl)
      return Promise.reject(error)  // 返回错误信息
    }
  } else {
    return Promise.reject(error)
  }
})

### GPT模型中Next Token功能的使用方法与实现细节 #### Next Token的核心原理 在自然语言处理领域,GPT(Generative Pre-trained Transformer)是一种基于Transformer架构的语言生成模型。其核心任务之一是预测下一个词元(next token),即给定一段上下文序列 `[x_1, x_2, ..., x_t]`,模型的目标是估计条件概率分布 `P(x_{t+1} | x_1, x_2, ..., x_t)` 并从中采样得到下一个词元[^1]。 #### 前向传播函数的具体实现 以下是一个典型的前向传播函数示例,展示了如何利用隐藏状态和输入标记 ID 来计算总损失: ```python def forward(self, hidden_states, token_ids): """ hidden_states: [T, B, D] 主模型输出 token_ids: [T, B] 输入token IDs """ T, B = token_ids.shape # 获取时间步数和批量大小 total_loss = 0.0 # 初始化总损失 # 预测逻辑... return total_loss # 返回最终的总损失 ``` 上述代码片段定义了一个简单的前向传播流程,其中 `hidden_states` 表示主模型提取的特征表示,而 `token_ids` 是输入的标记索引矩阵。 #### 注意力机制的作用 在实际运行过程中,注意力机制起到了关键作用。具体来说,在生成下一个词元时,模型会通过自注意力机制将前面所有词的信息集中到当前时刻的位置上。例如,在某个特定位置(如单词“by”处),模型会通过注意力权重将其他相关词语(如“own”的信息)集成进来,从而增强对该位置语义的理解[^3]。 #### 下一个词元的概率分布计算 对于具体的实现而言,通常会在最后一层全连接网络的基础上加上 Softmax 函数以获得归一化的概率分布。这一过程可以用如下伪代码描述: ```python logits = self.output_layer(hidden_state_at_last_position) # 计算未归一化分数 probs = torch.softmax(logits, dim=-1) # 应用Softmax转换成概率分布 next_token_id = torch.multinomial(probs, num_samples=1) # 根据概率分布随机抽样下一词元ID ``` 此处,`self.output_layer` 是映射至词汇表维度的最后一层线性变换;随后通过对 logits 施加 softmax 操作获取每个可能后续词元的发生可能性;最后依据这些概率执行多类别多项式抽样决定确切的下一项标识符。 #### 工具支持与调试建议 高效开发此类功能还需要依赖强大的工具链辅助完成。例如 PyTorch 提供灵活动态图构建能力便于快速原型设计验证想法;Hugging Face Transformers 则封装好了多种预训练好的大型语言模型简化迁移学习场景下的定制需求满足[^4]。 ---
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

接着奏乐接着舞。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值