2016-10-29 3 views
0

Ich versuche, neue Benutzer zu erstellen, nachdem ich mit Facebook/Google anmelden, aber immer Fehler mit:Benutzer konnte nicht PERMISSION_DENIED erstellen: Zugriff verweigert

error_handler.js:46 EXCEPTION: Uncaught (in promise): Error: PERMISSION_DENIED: Permission deniedErrorHandler.handleError @ error_handler.js:46next @ application_ref.js:291schedulerFn @ async.js:89SafeSubscriber.__tryOrUnsub @ PERMISSION_DENIED: Permission denied

meine Regeln sind:

"users": { 
     "$uid": { 
     // grants write access to the owner of this user account whose uid must exactly match the key ($uid) 
     ".write": "auth !== null && auth.uid === $uid", 
     // grants read access to any user who is logged in with Facebook 
     ".read": "auth !== null && (auth.provider === 'facebook' || auth.provider === 'google')" 
     } 
    } 

wenn Ich entferne meine Regeln alle funktioniert ok.

Mein Code ist:

private createNewUser(user: any): any { 
    const newUser = this.af.database.object('users/' + user.uid); 
    newUser.set({ 
     username: user.name, 
     email: user.email, 
     profile_picture: user.avatar, 
     provider : user.provider, 
     create_date: new Date().toISOString().slice(0, 10).replace(/-/g, "")}) 

    } 

was fileds Muss ich überprüfen?

+1

Wenn Sie 'console.log (user)' in 'createNewUser()' zeigt es ein Objekt mit einer 'uid' Eigenschaft? –

+0

ja ich habe diese UID auf Benutzer, @FrankvanPuffelen ist das ok zu verwenden ".write": "! Data.exists() || auth.uid === $ uid", wenn ich einen Benutzer erstellen möchte? –

Antwort

0

Schließlich verwende ich diese für die Nutzer Regeln.

"users": { 
     "$uid": { 
     // grants write access to the owner of this user account whose uid must exactly match the key ($uid) 
     ".write": "!data.exists() || auth.uid === $uid", 
     // grants read access to any user who is logged in with Facebook 
     ".read": "auth !== null && (auth.provider === 'facebook' || auth.provider === 'google')" 
     } 
    } 
0

Sie haben einen Fehler in Ihren Regeln.
Sie erlauben Schreibzugriff nur für bestehende Benutzer, die bereits uid unter users/uid Knoten haben, aber Sie erlauben keinen Schreibzugriff auf users Knoten.

Sie müssen Schreibzugriff unter users Knoten ermöglichen. Aber dies wird kaskadieren, was bedeutet, dass keine der .write Regeln unter users Knoten überprüft wird, wenn .write Regel unter Benutzer Knoten wird als wahr ausgewertet. Sie müssen also Ihre bestehende .write zu .validate ändern.

"users": { 
    // Grant every logged in user to write here 
    ".write": "auth !== null", 
    "$uid": { 
    // .validate rule will restrict .write if current user id does not match the key ($uid) 
    ".validate": "auth !== null && auth.uid === $uid", 
    // grants read access to any user who is logged in with Facebook 
    ".read": "auth !== null && (auth.provider === 'facebook' || auth.provider === 'google')" 
    } 
} 

Weitere Informationen darüber, wie Sie Sicherheitsregeln einrichten, auf den folgenden Link lesen und das Video auf diesen Link zu sehen.

https://firebase.google.com/docs/database/security/

+0

aber anther Benutzer kann einige Details lesen? wegen dem gelesen ... hab ich recht? –

Verwandte Themen