Matej Petric
Matej Petric

Reputation: 158

Problem with authenticating user using laravel socialite

I'm trying to make login with google using laravel socialite and I have a problem.

Route that initiates login:

Route::get('/auth/login/google', 'AuthController@google');

Method in controller that initiates login:

public function google()
{
    return Socialite::driver('google')->redirect();
}

Callback route:

 Route::get('/auth/login/google/redirect', 'AuthController@googleRedirect');

Callback method in controller:

public function googleRedirect()
{
    $googleUser = Socialite::driver('google')->user();
    $email = $googleUser->getEmail();
    $user = new User();
    $user = $user->firstOrCreate(['email' => $email], ['email' => $email, 'password' => 
    bcrypt(str_shuffle('abcdefgh45678')), 'email_verified' => 1]);
    Auth::login($user, true);
}

And I'm getting ERR_EMPTY_RESPONSE every time I'm trying to redirect user after login.

Funny thing is that I can dump data with dd(Auth::user()->id) and I'm getting user's ID, but when I try to redirect user to the home page using return redirect('/') I'm getting empty response error and if I manually go to home page my user is not authenticated.

Upvotes: 0

Views: 1006

Answers (1)

Qamar Rafhan
Qamar Rafhan

Reputation: 129

@Matej Petric blow code is working for me.

    public function handleProviderCallback($provider) {

        $user = Socialite::driver('google')->stateless()->user();
        $authUser = $this->findOrCreateUser($user);
        if ($authUser) {
            Auth::login($authUser, true);
            return redirect('/');
        } else {
            return redirect('/login')->withErrors(['msg', 'The Message']);
        }
    }

    public function findOrCreateUser($user) {
        $authUser = User::where('email', $user->email)->first();
        if ($authUser) {
            return $authUser;
        }
        $userN = User::create([
                    'name' => $user->name,
                    'email' => $user->email,
                    'password' => bcrypt(generateRandom()),
        ]);
        return $userN;
    }

Upvotes: 1

Related Questions