inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

GoRouter 적용하기

Http Status Error [401]에 관하여 - go_router : ^7.0.1 사용

해결된 질문

721

bluelf1004

작성한 질문수 2

0

go_router 7.0.1 버전을 사용하여 강의를 진행 중에 있습니다.

스크린샷 2023-11-30 오전 1.36.42.pngRefreshToken과 AccessToken은 Storage에서 지워진 상태입니다.

해당 상태에서 두개의 토큰이 null로 확인되면 dio.dart에서 dioError를 호출하고 reject하는 부분까지는 확인을 했습니다.

그런데 여기서 SplashScreen으로 이동을 하지 않고 Home화면에서 데이터를 가져오지못했다는 메시지만 띄웁니다.

로그 화면에도 보면 프로그램 실행 시 /restaurant을 호출하게 되는데 제가 코드에서 처리를 잘 못한건지 잘 모르겠습니다.

제가 생각하기에는 /restaurant가 호출되기 전에 /user/me가 먼저 호출 되어, 토큰 값을 체크하고 그 다음에 토큰 값의 유무에 따라 화면이 전환이 되어야 된다고 생각이 드는데 제가 잘못 이해하고 있는가요?

 

코드는 git에 올려두었습니다.

https://github.com/bluelf1004/study.git

 

 

flutter 하이브리드-앱

답변 1

1

코드팩토리

안녕하세요!

코드 확인 해봤습니다.

현재 강의를 멈춘 위치에서 다양한 문제가 있을 수 있지만

가장 크게는 refreshListenable을 아직 등록하지 않은 시점이라는 것입니다.

refreshListenable의 경우 특정 상태값이 변경될때 redirect를 재실행 하도록 할 수 있습니다.

refreshListenable을 등록하는 시점까지 오시면 에러 발생시 userProvider의 logOut() 함수를 실행하고 authProvider에서 이 부분을 listen 하고 notifyListeners()를 실행하고 있기 때문에 redirect를 재실행 하게됩니다. 그럼 자동으로 로그아웃 후 다시 로그인 스크린으로 이동됩니다.

말씀하신 사용자 정보를 먼저 체크하는것도 결과만 봤을땐 가능한 방법입니다. 하지만 모든 API 요청에 사용자 정보 확인이라는 디펜던시가 포함되며 이는 불필요한 네트워크 요청을 매번 추가로 보내게 되기 때문에 상당한 낭비라고 말씀 드릴 수 있습니다.

가장 좋은 방법은 필요한 요청만 보내고 해당 요청에서 에러가 날 경우 토큰을 폐기하고 로그인으로 이동시키는겁니다. 여기서 조금 더 상세하게 간다면 401에러에만 로그아웃을 진행 할 수도 있습니다.

설명이 부족한 부분이 있다면 댓글 부탁드립니다.

감사합니다!

0

bluelf1004

해당 부분 수정으로 인하여 해결 되었습니다.

그리고 추가적으로 말씀해주신 내용도 이해가 잘 되게 설명해주셔서 감사합니다.

Isar 마지막 업데이트는 2년전입니다.

0

30

0

FlutterSecureStorage 질문

0

31

0

Dio onError Interceptor 만드는 부분에 질문이 있습니다.

0

79

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

139

2

Asset folder??

0

82

2

디자이너와 협업 시 프레임 크기 설정 관련 질문

0

113

2

FutureProvider, StateNotifierProvider 선택 기준

0

70

2

컴포넌트 모델화

0

64

2

쿼리 파라미터

0

84

2

화면 안보임

0

67

2

PaginationListView

0

54

1

강의중 37.Dio onErrorInterceptor 작업하기 dio 관련 질문입니다.

0

101

2

프로토타입이미지

0

62

2

여러 객체를 상태 관리하는 방법에 대한 질문

0

84

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