inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

RefreshToken 만료되면 로그아웃

401에러 logout() 문제 auth_provider.dart에 logout() 함수 작성시 notifierListener() 추가시 해결했습니다.

566

장태성

작성한 질문수 13

0

GoRouter 프로젝트에 적용하기 / RefreshToken 만료되면 로그아웃 영상 4분42초 부분에서

void logout() {
 ref.read(userMeProvider.notifier).logout();
 notifierListener(); // 이부분 삭제하셨음.
}

수업에서 notifierListener()를 삭제하셨지만,

제 경우에는 삭제하면 오히려 401 에러로 인해 splashScreen을 빠져나가지 못하고 App이 멈춰버리는 문제가 생깁니다.

오히려 그대로 놔두는 것이 잘 작동합니다.

버전 문제인지 뭔지는 모르지만 다른 분들에게 도움 되었으면 해서

글로 남겨봅니다.

혹시 삭제한 이유가 따로 있는 건지 궁금하기도 합니다.

401 logout 하이브리드 앱 notifierlistener Flutter

답변 1

0

코드팩토리

안녕하세요.

혹시 지금까지 진행하신 프로젝트 레포지토리로 공유 가능하실까요?

제가 한번 확인해본 후 답변드리겠습니다!

0

장태성

https://github.com/bigdatachobo/flutter_lv2_course.git

branch - Applying-GoRouter

riverpod, gorouter 적용별로 브랜치 나눠서 저장했습니다.

Applying-GoRouter 브랜치에 들어가시면 됩니다.

0

코드팩토리

안녕하세요.

오랫동안 고민해봤는데 아직은 문제점을 찾지 못했습니다.

실행이 잘 안되셨으니 어딘가 버그가 발생하는 조건이 있긴 할텐데 조금 더 봐봐야 할 것 같네요.

일단 notifyListeners()를 삭제한 이유는 이미 userProvider의 상태가 변경될때마다 notifyListeners()를 실행해고 있기 때문입니다. logout()을 할때 User State가 존재하는 상태에서 User State null 상태로 변경되니 자동으로 notifyListeners()가 실행됩니다. 그럼 버그가 존재할 수 있는 구간은 User State가 변경되지 않았을때입니다. 즉 User State 있는상태 -> User State 있는상태 또는 User State null 상태 -> User State null 상태입니다.

하지만 이미 null 상태였다면 redirect rule에서 걸려서 /login 페이지로 이동이 됐을것입니다. 반대의경우 / 페이지로 이동됐을 것이구요. 그래서 이 경우에도 사실상 버그가 있으면 안될 것 같습니다.

notifyListeners() 함수를 추가해서 버그가 사라졌다고 말씀하신 부분에서 redirectLogic이 새로 불리니 버그가 없어졌다고 볼 수 있는데 애초에 user state가 null 이었다면 처음부터 로그인페이지로 이동이 됐어야해서 현재 파악하기 어려운 상황입니다.

혹시 어떤 행동을 취한 뒤에 버그가 발생했는지 기억이 나실까요?

0

장태성

결론적으로 notifyListeners()를 주석처리하고 다시 디버그 모드로 실행하니

잘 작동합니다.

지금까진 서버를 계속 켜놓고(24/7),

수업을 들으면서 중간 중간 코드를 고치면서

시뮬레이터 작동되나 안 되나를 계속 체크 했습니다.

RefreshToken 로직을 아직 적용하기 전에 작동시키다보니

accessToken 5분 토큰 만료, refreshToken까지 만료된게 겹치다보니

에러가 난 게 아닌가 싶습니다.

정확한 이유는 저도 잘 모르겠네요;;;

 

0

코드팩토리

네 그렇습니다. 일단 notifyListeners()가 필요한 경우라고 생각되니 조금 더 조사해보고 알려드리도록 하겠습니다!

[GoRouter & Authentication 마무리하기] 401 에러

4

923

2

자동 패키지 임포트 관련 질문 드립니다.

0

652

1

초급 중급 마무리한 학생입니다.. 파베관련 질문 하나만 받아주실 수 있을까요

0

440

1

Pagination 질문드립니다

0

473

1

레이아웃에 대해서 궁금한 질문!

0

499

1

강의에 적용된 디자인 패턴이 뭔가요??

1

676

1

네스팅 방식으로 goRouter Go를 사용할때, 앱바타이틀이 정상적으로 표시되지 않는 문제

0

564

2

GoRouter return이 안됩니다.

0

598

1

UserModel 에서는 IModelWithId를 implements하지 않는 이유가 있나요?

-1

540

1

서버쪽 /user/me api에서 에러가 나서 확인해보니..

0

410

1

[에러] GoRouter 적용, 401 에러가 뜹니다

0

365

1

ref.read.update // state + 1

0

449

1

typedef itemBuilder 제네릭 관련 질문이 있습니다.

0

453

1

[상태관리] Riverpod을 쓰신 이유가 있으신가요?

0

669

1

Dio 질문드립니다.!

0

780

2

CursorPagination 캐스팅 관련 문의

0

410

1

CursorPagination 캐시팅 관련 문의

0

399

2

AuthRepository 클래스 token() 함수는 Dead Code 아닌가요?

0

362

1

Rating을 GET 요청할때 DioError가 발생합니다.

-1

609

1

Token 관련 질문 드립니다.

0

452

2

수업의 내용은 아니지만 궁금해서 여쭤봅니다.

0

575

1

refresh 토큰 재발급 요청에 대해서

0

1688

1

_App 클래스가 ConsumerWidget을 상속 받으면 에러가 생깁니다

0

2553

4

이번 플러터와 다트 업데이트에서

1

268

1