작성
·
446
0
GoRouter 프로젝트에 적용하기 / RefreshToken 만료되면 로그아웃 영상 4분42초 부분에서
void logout() {
ref.read(userMeProvider.notifier).logout();
notifierListener(); // 이부분 삭제하셨음.
}
수업에서 notifierListener()를 삭제하셨지만,
제 경우에는 삭제하면 오히려 401 에러로 인해 splashScreen을 빠져나가지 못하고 App이 멈춰버리는 문제가 생깁니다.
오히려 그대로 놔두는 것이 잘 작동합니다.
버전 문제인지 뭔지는 모르지만 다른 분들에게 도움 되었으면 해서
글로 남겨봅니다.
혹시 삭제한 이유가 따로 있는 건지 궁금하기도 합니다.
답변 1
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 이었다면 처음부터 로그인페이지로 이동이 됐어야해서 현재 파악하기 어려운 상황입니다.
혹시 어떤 행동을 취한 뒤에 버그가 발생했는지 기억이 나실까요?
결론적으로 notifyListeners()를 주석처리하고 다시 디버그 모드로 실행하니
잘 작동합니다.
지금까진 서버를 계속 켜놓고(24/7),
수업을 들으면서 중간 중간 코드를 고치면서
시뮬레이터 작동되나 안 되나를 계속 체크 했습니다.
RefreshToken 로직을 아직 적용하기 전에 작동시키다보니
accessToken 5분 토큰 만료, refreshToken까지 만료된게 겹치다보니
에러가 난 게 아닌가 싶습니다.
정확한 이유는 저도 잘 모르겠네요;;;
https://github.com/bigdatachobo/flutter_lv2_course.git
branch - Applying-GoRouter
riverpod, gorouter 적용별로 브랜치 나눠서 저장했습니다.
Applying-GoRouter 브랜치에 들어가시면 됩니다.