Youtube Data API + firebase + nuxt + vuex + typescript + sass開発時のメモ
俺が躓いたエラーをメモ
sassじゃなくてscss
vueファイルの中身のスタイルシートでエラーが出たら、langをsassじゃなくてscssにすると動く場合もある
<style lang="scss" scoped>
</style>
sass-loader入れてるのに、何故かscss。
youtubeApiを叩く時はnpm使ってはいけない
npmにGoogeAPIsというモジュールがGoogle純正であるが、これはwebpack非対応らしく Cannot find module 'child_process'
というエラーが出てnuxtが動かない。
幸い、googleAPIはURLの構文が簡単だからライブラリ使わず直に文字列操作出来るからナシでいく。
typescriptでextendは使ってはいけない
vueファイルでexport defaultするオブジェクトは、asyncData等 vue標準には無いプロパティが追加されている。export default Vue.extend({});
とすると、そんなプロパティが無い とエラーになってしまうのでexport default {}
の書き方にする。
typescriptの意味が半減してるからなんとか解決出来たらいいんだがな。
node-sassは最新バージョンを使ってはいけない
2019/09/01時点ではsass-loaderのv8系は相性が悪いのでv7系を指定する事
options has an unknown property 'indentedSyntax'. These properties are valid:
のエラーが出る。issueは以下。
nuxtはsrc dirを指定する
nuxtはlayoutsやpages等、予約されたサブフォルダを配置する必要がある。標準ではプロジェクトルートに配置されるが、ソースコードはsrcディレクトリに纏めたい。
ので、nuxt.confg.ts にsrcDir:"./src",
を追加する。
youtubeApiでリクエスト時にopenIdを指定する
youtubeAPIのログインとfirebaseのログインは別の仕組みなので、本来はユーザは二度ログインしないといけない。
それは面倒なので、youtubeAPIのログイン結果で受信するidトークンという文字列をfirebaseに渡す事で、firebaseは確認画面を出さずにこっそりログイン状態にする事が出来る。
逆に、firebaseのログイン結果をyoutubeAPIに投げるのは出来なさそう?
idトークンの文字列は「oauth2 openID Token 」「JWT (JSON Web Token)」あたりが検索キーワード。
参考サイト
- http://webos-goodies.jp/archives/how_to_migrate_from_openid_to_openid_connect.html
- https://oauth.jp/blog/2012/10/26/json-web-token-jwt/
- https://uruly.xyz/firebase-youtube-channel/
- https://www.oauth.com/oauth2-servers/signing-in-with-google/getting-an-id-token/
なんでもIDトークンが使える訳ではなく、事前にfirebaseのプロジェクトの設定に このYoutubeAPI(実際はgoogleAPI)からのIDトークンを使えますよ という設定をする必要がある。
まず、YoutubeのAPI設定画面から、以下の赤枠の文字列を見る。
その値をFirebaseのAuthenticationのログイン方法、Google 外部プロジェクト の値に入れる。
管理画面での準備はこれでよし。
apiを取得する時、一番最初に投げる https://accounts.google.com/o/oauth2/auth へのリクエストパラメータのscopeにopenid emailを追加する。
そうすると、最後の https://www.googleapis.com/oauth2/v4/token からのレスポンスにid_tokenというパラメータがあり、文字列を取得出来る。
この文字列を以下のidTokenに入れると、ユーザからはログインを認識されずにログイン出来る。
const creds = firebase.auth.GoogleAuthProvider.credential(idToken);
firebase.auth().signInAndRetrieveDataWithCredential(creds).then((result) => {
if (result) {
let user = result.user;
console.log(user);
alert("idtokenでログイン成功")
}
}).catch(error => {
console.log(error);
alert("idtokenでログイン失敗")
})
Author And Source
この問題について(Youtube Data API + firebase + nuxt + vuex + typescript + sass開発時のメモ), 我々は、より多くの情報をここで見つけました https://qiita.com/Fushihara/items/549507f794c996603ef9著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .