правило firebase, позволяющее новому пользователю создавать объект своей учетной записи при первом входе в систему - PullRequest
0 голосов
/ 12 мая 2018

У меня есть это правило, оно прошло имитацию теста, но клиент получил сообщение об ошибке «Отказано в доступе» после успешной аутентификации с помощью Google. Приведенное ниже частичное правило проверяет наличие объекта uid внутри объекта users, если он не существует, ему разрешается создавать объект

!(root.child('users').child(auth.uid).exists())

Целые правила JSON ниже:

{
  "rules":{ 
    ".read":"root.child('users').child(auth.uid).child('roles/admin').val()===true || root.child('users').child(auth.id).child('id').val()===auth.uid",
    ".write":"!(root.child('users').child(auth.uid).exists()) || root.child('users').child(auth.uid).child('roles/admin').val()===true || root.child('users').child(auth.id).child('id').val()===auth.uid",
  } 
}

Угловой код:

@Effect() loginGetUserInfo$ = this.actions$.pipe(
    ofType(AuthActionTypes.AUTH_LOGIN_GET_USER_INFO),
    map((action: AuthLoginGetUserInfo) => action.user),
    exhaustMap((googleUser: User) => {
        const ref = this.db.object('users/' + googleUser.uid);
        debugger;
        return ref.valueChanges().pipe(
            map((user: User) => {
        debugger;
                if (!user) {
                    console.log("Is a new user:", googleUser);
                    //ref.set(googleUser);
                    ref.update(googleUser)
                    return new AuthLoginSuccessful(googleUser)
                }
                return new AuthLoginSuccessful(user)
            }),
            catchError(error => {debugger; return of(new AuthLoginFailure(error)) })
        )
    })
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...