You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用登录成功后获取用户数据出现401未授权错误的解决方法

解决登录后调用用户数据接口返回401未授权错误的方案

核心问题分析

登录接口返回的响应里包含了新的access_token,但你的登录代码没有将这个token保存到SharedPreferences中,导致后续调用用户数据接口时,仍然使用登录前的旧token,从而触发401未授权错误。

具体修复步骤

1. 修改登录方法,保存新的access_token

更新login函数,在登录成功后提取响应中的access_token并保存到SharedPreferences:

Future<User?> login(String nim, String password) async {
    String token = await UtilSharedPreferences.getToken();
    SharedPreferences pref = await SharedPreferences.getInstance();
    try {
      var body = {
        'username': nim,
        'password': password,
      };
      var response = await http.post(
        Uri.parse('http://dev.api.app.masoemuniversity.ac.id/v1/login_mhs'),
        headers: {
          'Authorization': 'Bearer $token',
        },
        body: body,
      );
      print(response.statusCode);
      print(response.body);
      if (response.statusCode == 200) {
        // 解析响应数据
        final responseData = jsonDecode(response.body);
        final user = User.fromJson(responseData);
        // 提取并保存新的access_token
        final newAccessToken = responseData['data']['access_token'];
        await pref.setString('token', newAccessToken); // 匹配UtilSharedPreferences使用的存储key
        return user;
      } else {
        return null;
      }
    } catch (e) {
      print(e);
      return null;
    }
  }

2. 确认Token读取逻辑正确性

确保UtilSharedPreferences.getToken()是从SharedPreferences中读取最新保存的token,示例实现如下:

class UtilSharedPreferences {
  static Future<String> getToken() async {
    SharedPreferences pref = await SharedPreferences.getInstance();
    return pref.getString('token') ?? '';
  }
}

3. 额外验证点

  • 调用getDataMahasiswa前,确认登录流程已完成且新token保存成功
  • 用JWT解析工具验证登录返回的access_token,检查过期时间、签名是否有效
  • 确认当前用户角色(Mahasiswa)拥有访问用户数据接口的权限

修复后验证流程

  1. 执行登录操作,通过日志确认新token已存入SharedPreferences
  2. 调用getDataMahasiswa,检查请求头的Authorization字段是否使用了新token
  3. 确认接口返回200状态码并成功获取用户数据

内容的提问来源于stack exchange,提问作者sharon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:57:16