2017-08-10 7 views
0

Ich habe ein Problem mit Laravel Persönlichkeit des öffentlichen Lebens mit, hier ist der Code:Laravel Socialite funktioniert nicht?

class SocialAuthController extends Controller 
{ 
    public function redirect($provider) { 
     return Socialite::driver($provider)->redirect();  
    } 
    public function callback(SocialAccountService $service, $provider) { 
     $user = $service->createOrGetUser(Socialite::driver($provider)); 
     auth()->login($user, true); 
     return redirect()->to('/'); 
    } 
} 

SocialAccountService:

public function createOrGetUser(Provider $provider) 
{ 
    $providerUser = $provider->user(); 
    $providerName = class_basename($provider); 
    $account = SocialAccount::whereProvider($providerName) 
     ->whereProviderUserId($providerUser->getId()) 
     ->first(); 
    if ($account) { 
     return $account->user; 
    }else{ 
     $account = new SocialAccount([ 
      'provider_user_id' => $providerUser->getId(), 
      'provider' => $providerName 
     ]); 
     $user = User::whereEmail($providerUser->getEmail())->first(); 
     if (!$user) { 
      $user = User::create([ 
       'email' => $providerUser->getEmail(), 
       'name' => $providerUser->getName(), 
       'avatar' => $providerUser->getAvatar(), 
      ]); 
     } 
     $account->user()->associate($user); 
     $account->save(); 
     return $user; 
    } 
} 

Jetzt das Problem, das ich bekommen habe ist:

FatalThrowableError Type error: Argument 1 passed to Illuminate\Auth\SessionGuard::login() must implement interface Illuminate\Contracts\Auth\Authenticatable, null given, called in /var/www/liveandnow/vendor/laravel/framework/src/Illuminate/Auth/AuthManager.php on line 294

Könnte jemand erklären, Was mache ich falsch? Weil ich alle Probleme nicht sehen hier mit meinem Code

Fehler

(1/1) InvalidStateException 

in AbstractProvider.php (line 209) 
at AbstractProvider->user() 
in SocialAccountService.php (line 11) 
at SocialAccountService->createOrGetUser(object(GoogleProvider)) 
in SocialAuthController.php (line 18) 
at SocialAuthController->callback(object(SocialAccountService), 'google') 
at call_user_func_array(array(object(SocialAuthController), 'callback'), array(object(SocialAccountService), 'provider' => 'google')) 
in Controller.php (line 55) 
at Controller->callAction('callback', array(object(SocialAccountService), 'provider' => 'google')) 
in ControllerDispatcher.php (line 44) 
at ControllerDispatcher->dispatch(object(Route), object(SocialAuthController), 'callback') 
in Route.php (line 203) 
at Route->runController() 
in Route.php (line 160) 
at Route->run() 
in Router.php (line 574) 
at Router->Illuminate\Routing\{closure}(object(Request)) 
in Pipeline.php (line 30) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in SubstituteBindings.php (line 41) 
at SubstituteBindings->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in VerifyCsrfToken.php (line 65) 
at VerifyCsrfToken->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in ShareErrorsFromSession.php (line 49) 
at ShareErrorsFromSession->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in StartSession.php (line 64) 
at StartSession->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in AddQueuedCookiesToResponse.php (line 37) 
at AddQueuedCookiesToResponse->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in EncryptCookies.php (line 59) 
at EncryptCookies->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in Pipeline.php (line 102) 
at Pipeline->then(object(Closure)) 
in Router.php (line 576) 
at Router->runRouteWithinStack(object(Route), object(Request)) 
in Router.php (line 535) 
at Router->dispatchToRoute(object(Request)) 
in Router.php (line 513) 
at Router->dispatch(object(Request)) 
in Kernel.php (line 176) 
at Kernel->Illuminate\Foundation\Http\{closure}(object(Request)) 
in Pipeline.php (line 30) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in TransformsRequest.php (line 30) 
at TransformsRequest->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in TransformsRequest.php (line 30) 
at TransformsRequest->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in ValidatePostSize.php (line 27) 
at ValidatePostSize->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in CheckForMaintenanceMode.php (line 46) 
at CheckForMaintenanceMode->handle(object(Request), object(Closure)) 
in Pipeline.php (line 148) 
at Pipeline->Illuminate\Pipeline\{closure}(object(Request)) 
in Pipeline.php (line 53) 
at Pipeline->Illuminate\Routing\{closure}(object(Request)) 
in Pipeline.php (line 102) 
at Pipeline->then(object(Closure)) 
in Kernel.php (line 151) 
at Kernel->sendRequestThroughRouter(object(Request)) 
in Kernel.php (line 116) 
at Kernel->handle(object(Request)) 
in index.php (line 53) 

Antwort

0

In auth()->login() haben Sie eine Instanz von App\User Modell zu schaffen, aber statt dass Sie vorbei null Wert.

Hier ist der Code, den Sie für (getestet) suchen:

public function redirectToProvider($provider) 
{ 
    return Socialite::driver($provider)->redirect(); 
} 

public function handleProviderCallback($provider) 
{ 
     $socialMediaUser = Socialite::driver($provider)->user(); 

     $user = $this->findOrCreateUser($socialMediaUser); 

     auth()->login($user); 

     return redirect()->route('home'); 
} 

public function findOrCreateUser($socialMediaUser) 
{ 
    $user = User::where('social_provider_id', $socialMediaUser->getId())->first(); 

    if(is_null($user)) { 
     $user = User::create([ 
      'social_provider_id' => $socialMediaUser->getId(), 
      'name' => $socialMediaUser->getName(), 
      'email' => $socialMediaUser->getEmail(), 
      'avatar' => $socialMediaUser->getAvatar() 
     ]); 
    } 

    return $user; 
} 

Der komplette Quellcode:

https://github.com/xparthxvorax/Laravel-Socialite

Hinweis:

Twitter nicht die E-Mail-Adresse des Nutzers angeben, damit dies nicht für Twitter funktioniert:

$user = User::whereEmail($providerUser->getEmail())->first(); 
+0

aber mein Code ist so ziemlich genau das gleiche, es funktioniert vor und es blieb plötzlich –

+0

dann die Frage der Arbeit mit den sozialen Service-Provider sein könnte, die Sie verwenden? Welchen benutzen Sie? In Callback-Funktion dd (Socialite :: Treiber ($ Provider) -> Benutzer()) und zeigen Sie mir die Ausgabe. –

+0

ich so etwas wie tihs: (1/1) InvalidStateException in AbstractProvider.php (Linie 209) bei AbstractProvider-> Benutzer() in SocialAccountService.php (Linie 11) bei SocialAccountService-> createOrGetUser (Objekt (GoogleProvider)) in SocialAuthController.php (Zeile 18) bei SocialAuthController-> Rückruf (Objekt (SocialAccountService), "google") –

Verwandte Themen