Open3
TCAのisowordsではaccessTokenをどこで保持してどのように利用しているのか
はじめに
AccessTokenというグローバルに使いたい値で、かつ変更が必要、さらに主にAPIに使われるような値をどのようにしてisowordsでは扱ってるのかを調べた。
利用箇所
APIClientLive
他にaccessTokenを取り出している箇所を探す。
accessToken: currentPlayer?.player.accessToken,
というコードがあるのがわかる。
currentPlayer
とはUserDefaultsに保存したユーザ情報を取得している様子。
- CurrentPlayerEnvelope型をUserDefaultsにあるDataから変換
これはつまり、
- APIClientの副作用を組み立てるlive()メソッドの中で別の副作用であるUserDefaults取り出しを行なっている
- Reducerで別途UserDefaults取り出し用のActionを実行しているわけではない
- UserDefaultsは直にアクセスしていてラッパーがあるわけではない
- UserDefautls保存のユニットテストなどは考えていない
- さらに上記のコードでは
didSet
でcurrentPlayerを上書きした際にUserDefaultsに保存し直している-
static func live()
の中はStatic領域(言い換えるとヒープ領域?)なのか
-
疑問点
currentPlayerは最新を取得できるか?
上書きされた後にcurrentPlayerにアクセスしたら最新になってるか?
AccessTokenの更新
ログアウトした際にcurrentPlayerをnilにする
プレイヤーのrefresh時にcurrentPlayerを上書きしている
つまり
- 前提
- Static領域でUserDefaults直結のcurrentPlayerを作っている
- Static領域のcurrentPlayerを上書き
- currentPlayer自体は当然変更される
- -> 疑問点の解決: 常にcurrentPlayerは最新を取得できる!
- UserDefaultsも上書きされる
- currentPlayer自体は当然変更される
live関数での利用箇所
APIClientのlive関数で初期値としてdefaultAccessToken
を利用できるようにしている
しかし、実際のアプリ利用では初期値としてセットしていない。sha256のパラメータのみセットしている。
初期値として代入可能にしてるがそれを利用している箇所は見つからなかった。さらにそもそもdefaultAccessToken
を使ってないような気がする。
PR出して修正された