田無rb#8 ~Nuxt.js firebase連携④~
今回も「Vue.js&Nuxt.js超入門」Chapter6の続きをやっていきます
Firebaseへのデータの追加
https://[プロジェクトID].firebaseio.com/person/[キー].json
というURLに対して axios の put メソッドを使ってアクセスを行う
axios.put([url], [object]);
これで指定のキーに対して object が値として保存される
※キーが存在する場合上書きされるので注意とのこと
Firebaseのデータ削除
追加で使っていた put メソッドを delete に変更すれば良いだけ
axios.put([url]);
まとめ
Firebaseを使う際は、どのURLにどのメソッドを使ってアクセスするかが重要
personの中でキーが 1 の値を取得する場合は以下のURL https://[プロジェクトID].firebaseio.com/person/1.json その中でnameを取得したい場合は以下のURL https://[プロジェクトID].firebaseio.com/person/1/name.json 全ての person のデータを取得したい場合のURL https://[プロジェクトID].firebaseio.com/person.json
また行う操作に対して以下のメソッドを使い分ける
- データの取得 ... get - データの保存 ... put - データの削除 ... delete
Firebaseのソーシャルログイン機能の利用
FirebaseはDBだけでなくソーシャルログイン機能も提供されているのでそれを使ってみる
Firebase側の設定
Firebaseのコンソールにアクセスしてサイドバーの [ Authentication ] をクリック => [ ログイン方法 ] リンクをクリック
ログイン方法がリスト化されている。今回は google ログインを使うので、有効にしてサポートメールアドレスを追加しておく
そしてアプリで利用する firebase の設定情報を取得しておく
歯車クリック => [ プロジェクトの設定 ] クリック => [ マイアプリ ] で設定を行うと以下のように apiKey などが発行されるのでそれらを使う
<script> // Your web app's Firebase configuration var firebaseConfig = { apiKey: "...", authDomain: "...", databaseURL: "...", projectId: "...", storageBucket: "...", messagingSenderId: "...", appId: "..." }; // Initialize Firebase firebase.initializeApp(firebaseConfig); </script>
アプリ側の設定
続いて、nuxt.js アプリからログインするために firebase パッケージをインストールする
$ npm install firebase --save
(余談:saveオプション必要だっけと思って調べてみたところ、npm5.0.0以降はデフォルトでsaveしてくれるので不要らしい)
実装したところ以下のエラーが発生
Error: This operation is not supported in the environment this application is running on. "location.protocol" must be http, https or chrome-extension and web storage must be enabled.
いろいろ調べたりしましたが今日は解決法が分からなかったのでまた次回〜
(2019/07/07追記)
エラーが発生してサーバが止まる状態になっていたため、以下のように例外補足を行うようにしたところ、処理は続くようになった(例外補足の処理が実行されるので根本解決にはなっていませんが...)
// before firebase.auth().signInWithPopup(provider) .then(function(result) { ... }); // after firebase.auth().signInWithPopup(provider) .then(function(result) { ... }).catch(function(error) { ... });
それとは別件で Firebase App named '[DEFAULT]' already exists (app/duplicate-app)
という例外も発生したので、以下のコメントを参考に修正しました
(2019/07/13追記)
then 側の処理で typo をしていたため修正したら直りました
ただ、例外処理を実行していたのは typo のせいでは無さそうなので、その他にも色々いじっている間にどこか変わってしまったのかも