iOS Firebase распространяет пользовательские заявки на анонимную авторизацию - PullRequest
0 голосов
/ 20 ноября 2018

В моей базе данных правил безопасности для Firestore я использую пользовательскую проверку претензийОни отлично работают.В моем приложении я использую анонимную аутентификацию.Я следовал инструкции, и в моем первом представлении у меня есть:

[[FIRAuth auth] signInAnonymouslyWithCompletion:^(FIRAuthDataResult * _Nullable authResult,NSError * _Nullable error) { 
FIRUser *user = authResult.user;
NSLog(@"userId: %@", user.uid);}];

Это работает, и я получаю userId, который я также вижу в консоли. Затем я использую вызываемые облачные функции, которые добавляют один пользовательский запрос кпользователь, используя его UID.Это работает, потому что в моем завершении iOS я запрашиваю getIDToken:

[user getIDTokenResultWithCompletion:^(FIRAuthTokenResult *result,NSError *error) {
                                         if (error != nil) {
                                         }
                                         else{
                                             NSLog(@"claims: %@",result.claims);
//here I start my queries}];

В этом журнале я вижу, что мое пользовательское требование было применено, uid правильный.Только после этого я запускаю свои запросы к базе данных Firestore, но получаю ошибку, связанную с правилами безопасности: Code = 7 «Отсутствует или недостаточно разрешений».

Если я остановлю приложение ипросто перезапустите его с этими запросами - они работают отлично.Таким образом, нет никаких сомнений относительно сроков.Я даже отложил свои запросы на минуту после получения ответа от облачных функций (с заявкой, поданной), но в первый раз (без перезапуска приложения) запросы не проходят правила безопасности.

Можно ли обновить анонимного пользователяв клиенте без перезапуска приложения?

ОБНОВЛЕНИЕ Кажется, что это решается путем обновления модулей до последней версии.В моем случае у меня было 5.0.2 и обновлено до 5.0.5

1 Ответ

0 голосов
/ 20 ноября 2018

Вот этот код для получения и установки данных в firebaseDB.

**view.h**

@ property (strong, nonatomic) FIRDatabaseReference * refOnline;

**view.m**
NSUserDefaults* standardUserDefaults = [NSUserDefaults standardUserDefaults];
    NSString *userID = [NSString stringWithFormat:@"%@",[standardUserDefaults valueForKey:@"UserID"]];
    self.refOnline = [[FIRDatabase database] reference];

    self.refOnline =[[self.refOnline child:userID] child:@"isOnline"];
    //[self.refOnline setValue:@"0"];


    [self.refOnline observeSingleEventOfType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
        NSDictionary *dict = snapshot.value;
        NSLog(@"%@",dict);



    } withCancelBlock:^(NSError * _Nonnull error) {
        NSLog(@"%@", error.localizedDescription);
    }];

    NSLog(@" %@",[self.refOnline child:@"isOnline"]);

**For Set Value**
[self.refOnline setValue:@"0"];

УСТАНОВИТЬ НАБЛЮДАТЕЛЬ ДЛЯ СОСТОЯНИЯПРОВЕРЬТЕ

FIRDatabaseReference *observRver =  [[FIRDatabase database] reference];
    observRver =[observRver child:[[mutDict  valueForKey:@"UserID"] objectAtIndex:indexPath.row]];

    [observRver observeEventType:FIRDataEventTypeValue withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
      if (snapshot.value != [NSNull null]){
        NSMutableArray *dict = snapshot.value;


        NSString *isOnline = [dict valueForKey:@"isOnline"];

        if([isOnline isEqualToString:@"1"]){
            cell.img_on_offline.image = [UIImage imageNamed:@"green_on"];
            cell.lbl_on_offline.text=@"Online";

        } else {
            cell.img_on_offline.image = [UIImage imageNamed:@"red_off"];
            cell.lbl_on_offline.text=@"Offline";
        }
      } else {
           FIRDatabaseReference *newRefrence =  [[FIRDatabase database] reference];
          newRefrence =[[newRefrence child:[[mutDict  valueForKey:@"UserID"] objectAtIndex:indexPath.row]] child:@"isOnline"];
          //[newRefrence setValue:@"1"];
          NSLog(@" %@",[newRefrence child:@"isOnline"]);
      }

    } withCancelBlock:^(NSError * _Nonnull error) {
        NSLog(@"%@", error.localizedDescription);
    }];

БАЗА ДАННЫХ, КАК ЭТО.enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...