inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

쉬어가기 - Refresh Token 확인 로직

만료된 refreshToken으로 요청할때의 문제, try catch가 작동하지 않는듯?

504

leolearn

작성한 질문수 2

0

 

 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에러를 표시합니다.

임시로 로그인스크린을 강제로 띄워서 다시 토큰을 발행해서 해결했습니다만

왜 이런 상황이 발생하는지 잘이해가 되지않아서 질문드립니다.

flutter 하이브리드-앱

답변 1

0

코드팩토리

안녕하세요!

현재 try..catch문을 추가한 부분은 정확한 위치가 맞습니다.

Dio를 포함한 대부분의 HTTP 요청 라이브러리들은 2xx 이외의 상태 코드를 받았을때 에러를 던지게 돼있습니다.

catch에 print() 코드가 잘 실행 되신다면 코드상 문제는 없습니다.

감사합니다!

0

leolearn

아 원래 그런거였군요 알려주셔서 감사합니다

강의 내용도 너무 알차서 항상 잘 배우고 있습니다 감사합니다 좋은하루 되세요 !

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