🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

Q&A

1回答

2750閲覧

Google認証時のアクセストークンを各ユーザごとに保存したいのですが、上手くいきません

shiba920sof

総合スコア5

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

YouTube API

YouTube APIはYouTubeのビデオコンテンツと機能性をウェブサイト、アプリケーション、デバイスに統合することを可能にします。

0グッド

1クリップ

投稿2019/09/29 23:04

編集2019/09/30 00:40

#Google認証時のアクセストークンを各ユーザごとに保存したいのですが

PHP・LaravelでWebアプリを制作中でして、その中で
######自分のアプリ上から、YouTubeに動画(自分で撮影したもの等)をアップロードできる機能を実装しました。

アプリでは、下記の手順で各ユーザの認証を行っています。

######1.アプリでの新規ユーザ登録(PWなど入力)
######2.Google認証(グーグル(YouTube)アカウントを選択)に飛び、認証を許可
######3.アプリにリダイレクト(戻る)
######4.YouTube動画を、選択したYouTubeアカウント上に投稿できる

しかし、Google認証時に各ユーザごとにアクセストークンを保存できていないために
最後にユーザ登録→Google認証を通ったYouTubeアカウントに、
動画が投稿されてしまいます。。。

つまり、2日前にユーザ登録したユーザが、このアプリを利用してYouTube動画投稿をしようとすると
つい先程ユーザ登録したユーザのYouTubeアカウント上に動画投稿されてしまうという
イケない仕様になっています。

######これは、Google認証時に、各ユーザごとにアクセストークンを保存できていないことによる問題だと思います。

#上手くいかない理由は・・・?

このYouTube動画投稿機能は、下記のサイトを参考に作っております。

######自分のアプリから、YouTube動画をアップロードする方法(英語サイト)
######https://artisansweb.net/how-to-upload-video-on-youtube-in-laravel-application/

このサイトに書かれているライブラリをインストールすることで、Google認証を行なっており
下記のYouTubeモデルで、アクセストークンが上書きされる仕様になっているのだと思われます。

######Youtube.phpより一部抜粋(※元の記載)

PHP

1public function saveAccessTokenToDB($accessToken) 2 { 3 return DB::table('youtube_access_tokens')->insert([ 4 'access_token' => json_encode($accessToken), 5 'created_at' => (new \DateTime())->setTimestamp($accessToken['created']), 6 ]); 7 } 8 9public function getLatestAccessTokenFromDB() 10 { 11 $latest = DB::table('youtube_access_tokens') 12 ->latest('created_at') 13 ->first(); 14 15 return $latest ? (is_array($latest) ? $latest['access_token'] : $latest->access_token ) : null; 16 }

なので、この部分を下記のように、
######「各ユーザごとにアクセストークンを保存」
######できるように書き換えました。

users_access_tokensテーブルを別途作り、その中に
ユーザごとのアクセストークンを保存できるように考えております。

######Youtube.phpより一部抜粋(※オリジナルで書き換え後の内容)

PHP

1public function saveAccessTokenToDB($accessToken) 2 { 3 if(\Auth::check()){ 4 $user=\Auth::user(); 5 $user->users_access_tokens()->create([ 6 'access_token' => json_encode($accessToken), 7 'created_at' => (new \DateTime())->setTimestamp($accessToken['created']), 8 ]); 9 } 10 } 11 12public function getLatestAccessTokenFromDB() 13 { 14 if(\Auth::check()){ 15 $user=\Auth::user(); 16 $latest = $user->users_access_tokens()->latest('created_at')->first(); 17 18 return $latest ? (is_array($latest) ? $latest['access_token'] : $latest->access_token ) : null; 19 } 20 }

ですが、このように書き換えても
アクセストークンが保存されません・・・。

おそらく
######2.Google認証に飛ぶ
ときに、私のアプリから離れて、Google認証に行くために、上記コードの

PHP

1if(\Auth::check()){

######という部分の、ログインされているかどうかのチェックで弾かれてしまい、
アクセストークンの保存まで行けないからだと思われます。

######どうすれば、Google認証時に、アクセストークンを各ユーザごとに保存できるでしょうか?

どなたか少しでも分かる方がおられましたら、
お知恵を貸して頂ければ非常に嬉しいです。。。

どうか宜しくお願い致します!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/09/30 00:04

LalavelではなくLaravelです。
shiba920sof

2019/09/30 00:41

ご指摘ありがとうございます。 今、書き換えさせて頂きました。 よろしくお願いいたします。
guest

回答1

0

Googleログインが必須なシステムであれば
自前のID/PWでのログインは廃止し
Googleアカウントでのログインに一本化してはどうでしょうか?

初回ログイン時は、GoogleのメールアドレスでUsersテーブルを精査し、なかったら新規ユーザー作成
存在すれば、auth()->loginUsingIdとかでログインさせます。

また、アクセストークンは最後の1個があればいいだけなので別テーブルで1対多で管理する必要はなく
usersテーブルにくっつけてしまってよいでしょう

投稿2019/09/30 03:30

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

shiba920sof

2019/10/03 09:32

遅くなりましたが、ご回答ありがとうございます! ご助言の通り、Googleアカウントでのログインに一本化する形で進めています。 ライブラリのLaravel Socialiteを利用して、ログイン自体の一本化には成功したんですが(お陰さまで、ログインが超ラクにできるようになりました^^) 上記YouTube動画投稿時に、トークンを取得して投稿するように実装したところ エラーが出てきて、困っているところです。。。 上記質問とは少しずれてしまい恐縮なのですが、下記Laravelエラーが表示されます。 ```PHP Client error: `POST https://accounts.google.com/o/oauth2/token` resulted in a `400 Bad Request` response: { "error": "invalid_request", "error_description": "Missing required parameter: code" } ``` これは、ユーザのトークンが取得できていないから起こるエラーでしょうか? ググっていくつか記載の解決方法を試みましたが、エラーは変わりませんでした。 ご提示している情報が不十分なところもあるかと思いますので、 その際は必要な内容を改めてお送りします。 少しでも何か分かりましたらお教え頂ければ幸いです。 よろしくお願いいたします。
mikkame

2019/10/03 09:36

Missing required parameter: code とかいてあるので、 OAuthの戻り後、codeをaccess_tokenに変換する時にcodeを遅れていないのだと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問