元々Goolgeのログイン認証はすでに実装済みで、追加でTwitterログインをSocialiteで作ろうと思いましたが以下のエラーが出てしまいました。
こちらを参考に試行錯誤しましたが、どうも今のコードをどのように書き換えれば実装できるのか分かりませんでした。
どうかよろしくお願いします。
Call to undefined method Laravel\Socialite\One\TwitterProvider::userFromToken()
該当のエラーコード
TwitterProvider.php
php
1 <?php 2 3namespace Laravel\Socialite\One; 4 5use InvalidArgumentException; 6 7class TwitterProvider extends AbstractProvider 8{ 9 /** 10 * {@inheritdoc} 11 */ 12 public function user() 13 { 14 if (! $this->hasNecessaryVerifier()) { 15 throw new InvalidArgumentException('Invalid request. Missing OAuth verifier.'); 16 } 17 18 $user = $this->server->getUserDetails($token = $this->getToken(), $this->shouldBypassCache($token->getIdentifier(), $token->getSecret())); 19 20 $extraDetails = [ 21 'location' => $user->location, 22 'description' => $user->description, 23 ]; 24 25 $instance = (new User)->setRaw(array_merge($user->extra, $user->urls, $extraDetails)) 26 ->setToken($token->getIdentifier(), $token->getSecret()); 27 28 return $instance->map([ 29 'id' => $user->uid, 30 'nickname' => $user->nickname, 31 'name' => $user->name, 32 'email' => $user->email, 33 'avatar' => $user->imageUrl, 34 'avatar_original' => str_replace('_normal', '', $user->imageUrl), 35 ]); 36 } 37}
LoginController.php
php
1<?php 2 3namespace App\Http\Controllers\Auth; 4 5use App\Http\Controllers\Controller; 6use App\User; 7use App\Providers\RouteServiceProvider; 8use Illuminate\Foundation\Auth\AuthenticatesUsers; 9use Illuminate\Http\Request; 10use Laravel\Socialite\Facades\Socialite; 11 12 13class LoginController extends Controller 14{ 15public function redirectToProvider(string $provider) 16 { 17 return Socialite::driver($provider)->redirect(); 18 } 19 20 public function handleProviderCallback(Request $request, string $provider) 21 { 22 $providerUser = Socialite::driver($provider)->user(); 23 24 $user = User::where('email', $providerUser->getEmail())->first(); 25 26 if ($user) { 27 $this->guard()->login($user, true); 28 return $this->sendLoginResponse($request); 29 } 30 31 return redirect()->route('register.{provider}', [ 32 'provider' => $provider, 33 'email' => $providerUser->getEmail(), 34 'token' => $providerUser->token, 35 ]); 36 } 37}
ルーティング
php
1Route::prefix('login')->name('login.')->group(function () { 2 Route::get('/{provider}', 'Auth\LoginController@redirectToProvider')->name('{provider}'); 3 Route::get('/{provider}/callback', 'Auth\LoginController@handleProviderCallback')->name('{provider}.callback'); 4});
Services.php
'google' => [ 'client_id' => env('GOOGLE_CLIENT_ID'), 'client_secret' => env('GOOGLE_CLIENT_SECRET'), 'redirect' => env('APP_URL') . '/login/google/callback', ], 'twitter' => [ 'client_id' => env('TWITTER_CLIENT_ID'), 'client_secret' => env('TWITTER_CLIENT_SECRET'), 'redirect' => env('APP_URL') . '/login/twitter/callback', ],
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/12 12:04