Laravel初心者です。
Laravel 5.7.28
XAMPP
Socialite 4.1.0
でOAuth認証を実装しようと考え、下記サイトを参考にしました。
https://leben.mobi/blog/laravel5_social_login/php/
一通りサイトに習いコードを記述しましたが、ソーシャルボタンを押下時に下記エラーが発生します。
Symfony \ Component \ Debug \ Exception \ FatalThrowableError (E_RECOVERABLE_ERROR) Argument 1 passed to Laravel\Socialite\SocialiteManager::formatRedirectUrl() must be of the type array, null given, called in C:\xampp\htdocs\demo\vendor\laravel\socialite\src\SocialiteManager.php on line 126
エラー箇所は下記のようです。
C:\xampp\htdocs\demo\vendor\laravel\socialite\src\SocialiteManager.php
* * @param array $config * @return array */ public function formatConfig(array $config) { return array_merge([ 'identifier' => $config['client_id'], 'secret' => $config['client_secret'], 'callback_uri' => $this->formatRedirectUrl($config), ], $config); } /** * Format the callback URL, resolving a relative URI if needed. * * @param array $config * @return string */ protected function formatRedirectUrl(array $config) { $redirect = value($config['redirect']); return Str::startsWith($redirect, '/') ? $this->app['url']->to($redirect) : $redirect; } /** * Get the default driver name. * * @throws \InvalidArgumentException *
原因がわからず困っております。
ご教授よろしくお願いします。
追記:
SocialiteManager.php 126行付近
public function buildProvider($provider, $config) { return new $provider( $this->app['request'], $config['client_id'], $config['client_secret'], $this->formatRedirectUrl($config), Arr::get($config, 'guzzle', []) ); }
config/services.php
'google' => [ 'client_id' => env('**********************************************************'), 'client_secret' => env('*************************'), 'redirect' => env('**************************'), ],
config/app.php
'providers' => [ Laravel\Socialite\SocialiteServiceProvider::class, ], 'aliases' => [ 'Socialite' => Laravel\Socialite\Facades\Socialite::class, ],
Auth/LoginController.php
<?php namespace App\Http\Controllers\Auth; use Illuminate\Http\Request; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\AuthenticatesUsers; use App\Events\Logined; use Socialite; use App\User; use Auth; class LoginController extends Controller { /* |-------------------------------------------------------------------------- | Login Controller |-------------------------------------------------------------------------- | | This controller handles authenticating users for the application and | redirecting them to your home screen. The controller uses a trait | to conveniently provide its functionality to your applications. | */ use AuthenticatesUsers; protected $maxAttempts = 2; // ログイン試行回数(回) protected $decayMinutes = 10; // ログインロックタイム(分) /** * Where to redirect users after login. * * @var string */ protected $redirectTo = '/verified'; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest')->except('logout'); } /** * ログイン認証後の処理 * @param Request $request * @param $user */ protected function authenticated(Request $request, $user) { // ログインイベントを発火させ最終ログイン日時を記録する event(new Logined()); } public function username() { return 'userid'; } /** * Handle Social login request * * @return response */ public function socialLogin($social) { return Socialite::driver($social)->redirect(); } /** * Obtain the user information from Social Logged in. * @param $social * @return Response */ public function handleProviderCallback($social) { $userSocial = Socialite::driver($social)->user(); $user = User::where(['email' => $userSocial->getEmail()])->first(); if($user){ Auth::login($user); return redirect()->action('HomeController@index'); }else{ return view('auth.register',['name' => $userSocial->getName(), 'email' => $userSocial->getEmail()]); } } }
回答2件
あなたの回答
tips
プレビュー