Closed DaichiSaito closed 7 years ago
iOS ver 2.3.4です。
【事象】 現在のログインユーザをユーザAとします。 ユーザAがユーザBのuserレコードに対して更新をかけると、NCMBUser.current()で取得できるオブジェクトがユーザBのもので書き換えられてしまいます。なのでそれ以降NCMBUser.current()を利用すると、ユーザーBのユーザ情報を取得してしまいます。
NCMBUser.current()
具体例
(省略・・・) print(NCMBUser.current()) // -> ユーザAの情報が出力される userB.incrementKey("LIKE", byAmount: 1) // ユーザBのLIKE情報を1インクリメント userB.saveInBackground { (error) in // userB print(NCMBUser.current()) // -> ユーザBの情報に書き換わる }
ソースを追ってみたところ、NCMBUserのsaveInBackgroundを呼ぶと以下メソッドも呼ばれ、その中でcurrentUserが上書かれるようです。
NCMBUser.m /** ログインユーザーをファイルに保存する @param NCMBUSer型ファイルに保存するユーザー */ + (void) saveToFileCurrentUser:(NCMBUser *)user { NSError *e = nil; NSMutableDictionary *dic = [user toJSONObjectForDataFile]; NSData *json = [NSJSONSerialization dataWithJSONObject:dic options:kNilOptions error:&e]; NSString *strSaveData = [[NSString alloc] initWithData:json encoding:NSUTF8StringEncoding]; [strSaveData writeToFile:DATA_CURRENTUSER_PATH atomically:YES encoding:NSUTF8StringEncoding error:&e]; currentUser = user; }
【質問】 NCMBのSDKは、そもそも他人のuserレコードを更新する前提で作られていないということでしょうか。 そうなると今回のようなLIKE等の情報はuserクラスではなく、LIKEクラスを作成しそこに保存していくことになるのでしょうか。
そうですね、セキュリティの関係上もあり、Userクラスにおいて誰でも更新できるのは良くないかと思います。とは言え、保存するとログインユーザが変わるのはどうかと思いますが…。 後はスクリプトから行うのが良いかと思います。
良ければiOS SDKでIssue報告をお願いします!
https://github.com/NIFTYCloud-mbaas/ncmb_ios/issues/new
ありがとうございます。Issue報告しました。
iOS ver 2.3.4です。
【事象】 現在のログインユーザをユーザAとします。 ユーザAがユーザBのuserレコードに対して更新をかけると、
NCMBUser.current()
で取得できるオブジェクトがユーザBのもので書き換えられてしまいます。なのでそれ以降NCMBUser.current()
を利用すると、ユーザーBのユーザ情報を取得してしまいます。具体例
ソースを追ってみたところ、NCMBUserのsaveInBackgroundを呼ぶと以下メソッドも呼ばれ、その中でcurrentUserが上書かれるようです。
【質問】 NCMBのSDKは、そもそも他人のuserレコードを更新する前提で作られていないということでしょうか。 そうなると今回のようなLIKE等の情報はuserクラスではなく、LIKEクラスを作成しそこに保存していくことになるのでしょうか。