Work Records

日々の作業記録です。ソフトウェアエンジニアリング全般から、趣味の話まで。

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は最近使い始めたので、ちょこちょこと使い心地をまとめていこうかなと。

[asin:B00G395OOE:detail]