만료된 refreshToken으로 요청할때의 문제, try catch가 작동하지 않는듯?
504
작성한 질문수 2
void checkToken() async {
final refreshToken = await storage.read(key: REFRESH_TOKEN_KEY);
final accessToken = await storage.read(key: ACCESS_TOKEN_KEY);
final dio = Dio();
try {
final resp = await dio.post(
'http://$ip/auth/token',
options: Options(
headers: {
'authorization': 'Bearer $refreshToken',
},
),
);
await storage.write(
key: ACCESS_TOKEN_KEY, value: resp.data['accessToken']);
// if (!mounted) return;
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(
builder: (_) => const RootTab(),
),
(route) => false);
} catch (e) {
print('e: $e');
// if (!mounted) return;
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute(
builder: (_) => const LoginScreen(),
),
(route) => false); // 뒤로가기 버튼을 눌러도 다시 로그인 화면으로 돌아가지 않음
}
}이 로직이 원래 잘됬는데
몇일 사용안하다가 다시키니까
dio.post 부분에서 401에러가 발생하는데
이는 만료된 refreshToken으로 요청해서 발생하는 에러로 예상했습니다.
그런데 try catch로 감쌋기때문에
catch아래 로그인스크린으로 이동하는 로직이 실행되어야 한다고 생각됬는데
예상과 다르게 그냥 앱은 먹통이되고 dio 패키지 내부로 이동되며 401에러를 표시합니다.
임시로 로그인스크린을 강제로 띄워서 다시 토큰을 발행해서 해결했습니다만
왜 이런 상황이 발생하는지 잘이해가 되지않아서 질문드립니다.
답변 1
Isar 마지막 업데이트는 2년전입니다.
0
31
0
FlutterSecureStorage 질문
0
32
0
Dio onError Interceptor 만드는 부분에 질문이 있습니다.
0
80
2
관리자 기능에 대한 질문
0
100
2
part 'restaurant_model.g.dart';
0
92
1
36강. dio 인터셉터에 storage를 전달하는 코드가 이해 안되는데요. 도움 부탁드립니다.
0
56
2
2번 반환 상황 관련 질문
0
61
2
riverpod 3.0
0
140
2
Asset folder??
0
82
2
디자이너와 협업 시 프레임 크기 설정 관련 질문
0
114
2
FutureProvider, StateNotifierProvider 선택 기준
0
70
2
컴포넌트 모델화
0
64
2
쿼리 파라미터
0
84
2
화면 안보임
0
68
2
PaginationListView
0
54
1
강의중 37.Dio onErrorInterceptor 작업하기 dio 관련 질문입니다.
0
103
2
프로토타입이미지
0
62
2
여러 객체를 상태 관리하는 방법에 대한 질문
0
85
2
장바구니 결제하기 응답이 500이 옵니다.
0
105
2
removeFromBasket에서 await patchBasket()을 마지막에 하면 에러나는거 아닌가요?
0
67
2
이 두가지는 완전히 동일한 기능인가요?
0
106
3
내부 코드를 작성하지 않은 CursorPaginationLoading가 어떻게 로딩상태를 갖는지 잘 모르겠습니다...
0
77
2
_SplashScreenState에서 storage를 late로 호출해서 한번만 불러와도 되나요?
0
86
2
코딩 작성 순서 관련 질문
0
88
2





