LOGIN WITH GOOGLE IN LARAVEL

In this tutorial we are going to add authentication via Google.

We’re going to use Socialite.

Step 1 : Install Package

Install following package from official laravel site

composer require laravel/socialite

Step 2 : Add provider

Add service provider & alias in config file

<?php
return [
    "providers" => [
        Laravel\Socialite\SocialiteServiceProvider::class,
    ],
    "aliases"   => [
        "Socialite" => Laravel\Socialite\Facades\Socialite::class,
    ],
];

Step 3 : Config file

These providers follow the OAuth 2.0.

Google authenticator require a client_id, client_secret and redirect url.

First, add the values to the config file because socialite will be looking for them in following file : config/services.php

<?php
return [
    "google" => [
        "client_id"     => env("GOOGLE_CLIENT_ID"),
        "client_secret" => env("GOOGLE_CLIENT_SECRET"),
        "redirect"      => "/auth/google/callback",
    ],
];

Step 4 : Create OAuth client ID in Google

Create project in google console & create OAuth client ID form following link : 

https://console.developers.google.com/apis/credentials

and add created credential step 3


Step 5 : Add Routes

add following routes in routes/web.php

<?php
Route::get("/auth/google/redirect", "Front\AuthGoogleController@redirect");
Route::get("/auth/google/callback", "Front\AuthGoogleController@callback");

Step 6 : Create controller

Create controller & add following methods in that.

<?php
namespace App\Http\Controllers\Front;
use App\Http\Controllers\Controller;
use App\User;
use Auth;
use Exception;
use Socialite;

class AuthGoogleController extends Controller {
    public function redirect() {
        return Socialite::driver("google")->redirect();
    }
    public function callback() {
        try {
            /*...get data from google...*/
            $googleUserDetail = Socialite::driver("google")->user();
            /*...user detail...*/
            $userDetail = User::where("email", $googleUserDetail->email)->first();
            if (empty($userDetail) || $userDetail->count() < 0) {
                /*...create new user...*/
                $userDetail            = new User;
                $userDetail->name      = $googleUserDetail->name;
                $userDetail->email     = $googleUserDetail->email;
                $userDetail->google_id = $googleUserDetail->id;
                $userDetail->password  = bcrypt($googleUserDetail->email);
                $userDetailSave        = $userDetail->save();
                if ($userDetailSave) {
                    return redirect()->route("admin_login")->with(["error-message" => "Something went wrong! Please try again."]);
                }
            }
            Auth::loginUsingId($userDetail->id);
            return redirect()->route("admin_profile_view");
        } catch (Exception $e) {
            return redirect()->route("admin_login")->with(["error-message" => "Something went wrong! Please try again."]);
        }
    }
}

That's all friends.