ParseのPFUser
ParseのPFUserで2点ほどはまったのでメモ。
基本的にキャッシュしてる
こんな感じでユーザーのレコードをとって来れるんだけど、基本的にキャッシュしている。
_currentUser = [PFUser currentUser];
なので、Parseからとりたい場合には以下のようにしないといけない。
[_currentUser refresh];
バックグラウンドで実行するなら
[_currentUser refreshInBackgroundWithBlock:^(PFObject *object, NSError *error)block];
User Classだけ通常のクエリを発行できないんだなあと思っていたら、どうやら出来るらしい。
ただし、_を付ける。
PFQuery *query = [PFQuery queryWithClassName:@"_User"];
(予約Classはこんなルールがあるようだ。)
PFQueryだとキャッシュのルールがいくつかあって、便利だなあと思ったんだけど予約Classにはないんだろうか。。。
query.cachePolicy = kPFCachePolicyIgnoreCache; // キャッシュ使わない query.cachePolicy = kPFCachePolicyCacheOnly; //キャッシュからだけ取得 query.cachePolicy = kPFCachePolicyNetworkOnly; // ネットワークからだけ取得 query.cachePolicy = kPFCachePolicyCacheElseNetwork; // キャッシュがだめならネットワークから query.cachePolicy = kPFCachePolicyNetworkElseCache; // ネットワークがだめならキャッシュから query.cachePolicy = kPFCachePolicyCacheThenNetwork; // キャッシュを取得してからネットワークを取得する (コールバックが2回呼ばれる)
そんな感じで、PFUserのキャッシュ問題はクリアしたんだけど、それでもemailVerifiedの変更だけ読めないという問題にぶち打ち当たる。
emailVerifiedの手動変更は出来ない
emailVerified自体は非常に便利な機能で、Parse -> Settings -> Email Settings -> Verify user emails をonにするだけで、ユーザー新規登録時に登録したメアドに確認用メールを送ってくれる(これだけで泣きそうなほどうれしい)。
ただし、これにはハメがあってParseのData Browser上でぽちぽちと値をかえてもDatabaseには反映されない。
メールを受け取った人がそこに載っているURLを押さない限り有効にならないそうだ。
そのため自分は以下で、延々とはまっていた。
1. ParseのData Browser上で値を更新
2. クライアントで[PFUser refresh]して値を確認するが、かわっていない
3. なんで????
Data Browser上で値が更新できないのであれば当たり前なんだが、そもそも編集不可能にしろと言いたい。。。
同じように悩んでいる人がいたので参考になりました。
https://www.parse.com/questions/how-can-i-manually-verify-a-users-email
Parseは最近使い始めたので、ちょこちょこと使い心地をまとめていこうかなと。