Sto provando ad implementare il pacchetto Socialite nel mio progetto. Ecco il mio codice che funziona bene. Tuttavia esegue la duplicazione della voce nel database se l'utente si disconnette tenta di accedere nuovamente. Inoltre non riesco a ottenere il nome pubblico dell'utente con $ userData-> nome. Restituisce nulla.Laravel Socialite Google Registrazione e accesso
Ecco il mio controller;
namespace App\Http\Controllers;
use App\AuthenticateUser;
use App\AuthenticateUserListener;
use App\Http\Requests;
use Illuminate\Http\Request;
class SocialLoginsController extends Controller implements
AuthenticateUserListener
{
/**
* @param AuthenticateUser $authenticateUser
* @param Request $request
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
public function socialLogin(AuthenticateUser $authenticateUser, Request $request)
{
$hasCode = $request->has('code');
return $authenticateUser->execute($hasCode, $this);
}
/**
* When a user has successfully been logged in...
*
* @param $user
* @return \Illuminate\Routing\Redirector
*/
public function userHasLoggedIn($user)
{
return redirect('student');
}
Il mio repository utente;
namespace App\Repositories;
use App\User;
class UserRepository {
public function findByUsernameOrCreate($userData)
{
return User::firstOrCreate([
'username' => $userData->name,
'email' => $userData->email,
]);
}
}
Autentica classe utente;
<?php namespace App;
use Illuminate\Contracts\Auth\Guard;
use App\Repositories\UserRepository;
use Laravel\Socialite\Contracts\Factory as Socialite;
class AuthenticateUser {
/**
* @var UserRepository
*/
private $users;
/**
* @var Socialite
*/
private $socialite;
/**
* @var Guard
*/
private $auth;
/**
* @param UserRepository $users
* @param Socialite $socialite
* @param Guard $auth
*/
public function __construct(UserRepository $users, Socialite $socialite, Guard $auth)
{
$this->users = $users;
$this->socialite = $socialite;
$this->auth = $auth;
}
/**
* @param boolean $hasCode
* @param AuthenticateUserListener $listener
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
public function execute($hasCode, AuthenticateUserListener $listener)
{
if (! $hasCode) return $this->getAuthorizationFirst();
elseif($hasCode) {
$user = $this->users->findByUsernameOrCreate($this->getGoogleUser());
$this->auth->login($user, true);
return $listener->userHasLoggedIn($user);
}
}
/**
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
private function getAuthorizationFirst()
{
return $this->socialite->driver('google')->redirect();
}
/**
* @return \Laravel\Socialite\Contracts\User
*/
private function getGoogleUser()
{
return $this->socialite->driver('google')->user();
}
}