#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認証時に、アクセストークンを各ユーザごとに保存できるでしょうか?
どなたか少しでも分かる方がおられましたら、
お知恵を貸して頂ければ非常に嬉しいです。。。
どうか宜しくお願い致します!