[解決済み] Firebaseのアクセス権が拒否されました
質問
私は比較的新しいコーディング担当者ですが、困っています。
私は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 WARNING: set at /users/(GoogleID) failed: permission_denied です。 2016-05-23 22:52:42.707 firebase.js:227 Uncaught (in promise) Error: PERMISSION_DENIED: パーミッションが拒否されました(...)
私がこれを調べようとすると、Firebaseのルールについて話しますが、それは私がまだ学んでいない言語であるようです(またはそれは単に私の頭の上を通過しています)。何が原因なのか、どなたか説明していただけませんか?私は、私がメールとユーザー表示名を保存するように求めていて、あなたがこれを許可されていないだけだと思ったのですが、それらを取り除いても、まだ同じ問題がありました。ルールを設定せずにこのエラーを回避する方法があるのでしょうか、それともルールは1日で書けるようになるものなのでしょうか、それとも私の専門外なのでしょうか。
どんな助けでもありがとうございます!
どのように解決するのですか?
デフォルトでは、プロジェクト内のデータベースは Firebase コンソール のプロジェクトのデータベースは、管理者ユーザー(Cloud Functions や Admin SDK を使用するプロセスなど)だけが読み取り/書き込みが可能です。サーバー側のセキュリティ ルールを変更しない限り、通常のクライアント側 SDK のユーザーはデータベースにアクセスできません。
認証されたユーザーのみがデータベースを読み取り/書き込みできるように、ルールを変更することができます。
{
"rules": {
".read": "auth != null",
".write": "auth != null"
}
}
を参照してください。 quickstart for the Firebase Database security rules を参照してください。 .
しかし、コードからユーザーをサインインさせていないので、データベースはデータへのアクセスを拒否しています。これを解決するには、データベースへの未認証のアクセスを許可するか、データベースにアクセスする前にユーザーにサインインする必要があります。
データベースへの未認証のアクセスを許可する
現時点での最も簡単な回避策は (チュートリアルが更新されるまで)、プロジェクトのコンソールでデータベース パネルに入り、ルール タブを選択して、内容をこれらのルールに置き換えることです。
{
"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.
// ...
}
// ...
});
関連
-
要素ツリー制御によるvueTreeテーブル
-
vueはopenlayersを使用してスカイマップとガオードマップをロードする
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
Vueでルートネスティングを実装する例
-
Vueの一般的な組み込みディレクティブの説明
-
[解決済み】"フォームが接続されていないため、フォームの送信がキャンセルされました "というエラーの取得について
-
[解決済み】React - TypeError: 未定義のプロパティ 'props' を読み取ることができない。
-
[解決済み] FirebaseのapiKeyを公開しても大丈夫ですか?
-
[解決済み】Firebaseで複数のwhere句に基づくクエリ
-
[解決済み] Firebase Cloud FunctionのHTTPエンドポイントを保護し、Firebase認証ユーザーのみを許可するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
fetch ネットワークリクエストラッパーの説明例
-
vueネットワークリクエストソリューション ネイティブネットワークリクエストとjsネットワークリクエストライブラリ
-
JavaScriptにおけるマクロタスクとミクロタスクの詳細
-
jQueryのコピーオブジェクトの説明
-
Vueにシンプルなメモ帳機能を実装
-
Javascript Bootstrapのグリッドシステム、ナビゲーションバー、ローテーションの説明
-
[解決済み】JavaScriptの配列でforEachが関数でない不具合
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
nodejs unhandledPromiseRejectionWarning メッセージ
-
JavaScriptのgetElementById、getElementsByTagNam、getElementsByClassNameの違いと使い方