TodoMate ์ดํ์ ์ฐธ๊ณ ํ์ฌ Wafflemate ์ดํ์ ์ ์ํ์ต๋๋ค.
๊ธฐ์กด ์ฑ์ ์๋ ํ๋ก์ฐ์ฐจ๋จ ๊ธฐ๋ฅ, ์๊ฐ์ฒดํฌ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ SNS ๊ธฐ๋ฅ์ ๊ฐํํ๊ณ ์ผ์ ๊ด๋ฆฌ ์ฌ์ฉ์ฑ์ ๋ํ์ต๋๋ค.
์น๊ตฌ๋ค๊ณผ ํจ๊ปํ๋ ์ผ์ ๊ด๋ฆฌ, ์ํ๋ฉ์ดํธ!
์ผ์ ๊ด๋ฆฌ์ ๋๋ถ์ด ํ๋ก์ฐ ํ๋ก์์ด ๊ฐ๋ฅํ SNS ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
์ผ์ /์ผ๊ธฐ ๊ณต์ ๋ฅผ ํตํด ํจ๊ณผ์ ์ธ ์ผ์ ๊ด๋ฆฌ๋ฅผ ๊ฒฝํํ์ธ์.
| ์ก๊ฑด์ฐ(Gitsgwoo) | ์ง์ฑ์ฐ(hzlcodus) | ์ค๋๊ฑด(ho2921ho) |
- ์ฌ์ฉ์ ๋ก๊ทธ์ธ ์์ฒญ ์ฒ๋ฆฌ ์์ ์ฑ์ shared preference์ access token, refresh token, ์ฌ์ฉ์ ์ ๋ณด๋ฅผ ์ ์ฅํฉ๋๋ค.
- ์ธ์ฆ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ data class AuthInfo ๋ฅผ ๋ง๋ค๊ณ ์ธ์ฆ ์ ๋ณด๋ฅผ AuthStorage class์ ๋ณ์ authInfo์ StateFlow์ ํํ๋ก ์ ์ฅํฉ๋๋ค.
- ์ฑ์ startdestination์ ๋ฉ์ธํ์ด์ง๋ก ์ค์ ํด๋๊ณ , ๋ฉ์ธํ์ด์ง์ lifecycle ์ค OnViewCreated ์์ ์ฌ์ฉ์์ authInfo ๊ฐ์ด null์ธ์ง ํ์ธํฉ๋๋ค.
- ๊ฐ์ด null์ด๋ผ๋ฉด ๋ก๊ทธ์ธ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ์ค์ฒฉ๊ทธ๋ํ login_graph๋ก navigate ๋ฉ๋๋ค.
login_graph : ์์ ํ์ด์ง, ํ์๊ฐ์ ํ์ด์ง, ์ด๋ฉ์ผ ์ธ์ฆ ํ์ด์ง, ๋ก๊ทธ์ธ ํ์ด์ง๋ก ๊ตฌ์ฑ
- retrofit ๋ฐ okhttp3์ interceptor ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ฌ์ฉ์์ access token์ ์๋์ผ๋ก Authorization ํค๋์ ๋๊ฒจ์ฃผ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์์ต๋๋ค.
- ์ต์ด ๋ก๊ทธ์ธ ๋๋ ์ฌ๋ก๊ทธ์ธ ์์๋ access token์ ๋๊ฒจ์ค ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ if ๋ฌธ์ ํตํด์ Authorization ํค๋์ ๋น String์ ๋๊ฒจ์ฃผ๋๋ก ์ฒ๋ฆฌํ์ต๋๋ค.
- access token์ ์ ํจ๊ธฐ๊ฐ์ด ๋ง๋ฃ๋๋ฉด ๋ฐ์ํ๋ 401 ์๋ฌ๋ฅผ catchํ์ฌ, sharedPreference์ ์ ์ฅ๋ refresh token์ ์ฌ์ฉํด access token์ ์ฌ๋ฐ๊ธ ๋ฐ๋๋ก ํ์ต๋๋ค.
- sharedPreference์ ์ฌ๋ฐ๊ธ๋ ํ ํฐ์ ์ ์ฅํ ํ chain ์ Request ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํด ์ฌ๋ฐ๊ธํ ํ ํฐ์ ํค๋์ ๋ฃ๊ณ ๋ค์ ์์ฒญ์ ๋ณด๋ด๋๋ก ํ์ต๋๋ค.
- refresh token์ผ๋ก access token์ ์ฌ๋ฐ๊ธํ๋ ๋ก์ง์ Request.Builder()๋ฅผ ์ฌ์ฉํด refreshRequest๋ฅผ ์์ฑํ์ฌ OkHttpClient().newCall(refreshRequest).execute()๋ฅผ ํตํด ์ง์ ์๋ฒ์ ์์ฒญ์ ๋๊ธฐ๋๋ก ๊ตฌ์ฑํ์์ต๋๋ค.