私はコーディングの初心者なので、困っています。
Firebaseにデータを送るためのコードがあります
app.userid = app.user.uid
var userRef = app.dataInfo.child(app.users);
var useridRef = userRef.child(app.userid);
useridRef.set({
locations: "",
theme: "",
colorScheme: "",
food: ""
});
しかし、次のエラーが発生し続けます:
FIREBASE 警告: /users/(GoogleID) での設定に失敗しました: permission_denied 2016-05-23 22:52:42.707 firebase.js:227 キャッチされませんでした (promise 内) エラー: PERMISSION_DENIED: 権限が拒否されました(…)
調べてみると、Firebase のルールについて書かれていますが、まだ習得していない言語のようです (または、理解できないだけです)。 問題の原因を説明していただけますか? 電子メールとユーザーの表示名を保存するように要求したのに、それが許可されなかっただけだと思っていましたが、それらを削除しても同じ問題が発生しました。 ルールを設定せずにこのエラーを回避する方法はありますか? それとも、ルールは 1 日で自分で書く方法を学べるものですか? それとも、私にはまったく手に負えないのでしょうか?
ご協力いただきありがとうございます!
ベストアンサー1
デフォルトでは、プロジェクト内のデータベースはFirebase コンソール管理ユーザーのみが読み取り/書き込み可能です (例: Cloud Functions 内、または Admin SDK を使用するプロセス内)。サーバー側のセキュリティ ルールを変更しない限り、通常のクライアント側 SDK のユーザーはデータベースにアクセスできません。
認証されたユーザーのみがデータベースを読み取り/書き込みできるようにルールを変更できます。
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
を参照してくださいFirebase データベース セキュリティ ルールのクイックスタート。
しかし、コードからユーザーをサインインさせていないため、データベースはデータへのアクセスを拒否します。これを解決するには、データベースへの認証されていないアクセスを許可するか、データベースにアクセスする前にユーザーをサインインさせる必要があります。
データベースへの認証されていないアクセスを許可する
現時点での最も簡単な回避策は (チュートリアルが更新されるまで)、プロジェクトのコンソールのデータベース パネルに移動し、[ルール] タブを選択して、内容を次のルールに置き換えることです。
{
"rules": {
".read": true,
".write": true
}
}
これにより、データベースの URL を知っているすべてのユーザーが新しいデータベースを読み取りおよび書き込みできるようになります。実稼働環境に移行する前に、データベースを再度保護してください。そうしないと、誰かがデータベースを悪用する可能性があります。
データベースにアクセスする前にユーザーをサインインしてください
(少し)時間はかかりますが、より安全な解決策としては、以下のいずれかsignIn...
の方法を呼び出します。Firebase認証データベースにアクセスする前にユーザーがサインインしていることを確認する。これを行う最も簡単な方法は匿名認証を使用する:
firebase.auth().signInAnonymously().catch(function(error) {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
// ...
});
そしてサインインが検出されたらリスナーをアタッチします
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
var isAnonymous = user.isAnonymous;
var uid = user.uid;
var userRef = app.dataInfo.child(app.users);
var useridRef = userRef.child(app.userid);
useridRef.set({
locations: "",
theme: "",
colorScheme: "",
food: ""
});
} else {
// User is signed out.
// ...
}
// ...
});