2016-10-29 24 views
0

を拒否::許可は、私はFacebookの/グーグルでログインした後、新しいユーザーを作成しようとしているが、とのエラーを取得しています

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

私のルールは以下のとおりです。

"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')" 
     } 
    } 

私はすべての仕事が大丈夫私のルールを削除します。

私のコードは次のとおりです。

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, "")}) 

    } 

は何fileds私がチェックする必要がありますか?

+1

'createNewUser()'の 'console.log(user)'は 'uid'プロパティを持つオブジェクトを表示しますか? –

+0

はい私はこのユーザーIDを持っていますが、@FrankvanPuffelenは ".write"を使うのにこのokです: "!data.exists()|| auth.uid === $ uid"、私はユーザーを作成したいですか? –

答えて

0

最後に、私は、ユーザーのために、このルールを使用しています。

"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

あなたのルールは間違いです。
すでにuidのノードにあるのは、users/uidノードの下にある書き込みアクセスを許可しますが、usersノードの書き込みアクセスは許可しません。

usersノードの下で書き込みアクセスを許可する必要があります。しかし、これはカスケードします。つまり、.writeユーザの下のルールが真と評価された場合、ノードの下にあるルールのうちどれもusersノードのどれもチェックされません。既存の.write.validateに変更する必要があります。

"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')" 
    } 
} 

セキュリティルールを設定する方法の詳細については、次のリンクを参照して、このリンクのビデオをご覧ください。

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

+0

しかし、他のユーザーはいくつかの詳細を読むことができますか?読んだので...私は正しい? –

関連する問題