How to Implement login with google in laravel
Tags: laravel, google, social, webdev
Published: 2022-05-03 15:05:04


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oxwgm2zk298syixfcked.png)

Nowadays, users are less interact with the website. You want to register users on your platform. You should simplify the process of registration and login for your application. Laravel provides a socialite package to ease the process, i.e., in minimum steps, users can connect to your application. In this article, we implement login with google in laravel application.

## Step-by-step guide on google login in the laravel application

1. Install Package
Install Socialite package on laravel application. Run the following command.
```
composer require laravel/socialite
```

2. Configure credentials
See the Screenshot for getting google credentials. Click here to make credentials on the google platform.

You can add credentials to the env file and add the environment variable on a config/services.php file against the google variable like below:

```
GOOGLE_AUTH_CLIENT_ID=XXXXXXXXXXXXXXXX
GOOGLE_AUTH_CLIENT_SECRET=XXXXXXXXXXXXX
GOOGLE_AUTH_URL=http://127.0.0.1:8000/auth/google
```
The services.php file looks like the below:
```
'google'=>[
    'client_id' => env('GOOGLE_AUTH_CLIENT_ID'),
    'client_secret' => env('GOOGLE_AUTH_CLIENT_SECRET'),
    'redirect'=> env('GOOGLE_AUTH_URL')
]
```
3. Make migration column to the user table
Make a migration file that will create a column inside the user's table. Run migration command in your application.
```
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddGoogleIdColumn extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function ($table) {

            $table->string('google_id')->nullable();

        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropColumns('google_id');
    }
}
```
Add google_id field to fillable property on User.php file.
```
protected $fillable = [
    'name',
    'email',
    'password',
    'google_id'
];
```
4. Create a controller for social login
You can make a controller for social login and load the drivers for social login. I am going to load google driver.
```
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
use Exception;
use Inertia\Inertia;
use Illuminate\Support\Facades\Route;
use App\Models\User;
use Illuminate\Support\Facades\Auth;

class SocialController extends Controller
{
    public function redirectToGoogle()
    {
        return Socialite::driver('google')->redirect();
    }
    public function handleGoogleCallback()
    {
        try {
            $user = Socialite::driver('google')->user();
            $finduser = User::where('google_id', $user->id)->first();
            if($finduser){
                Auth::login($finduser);
                return redirect('/');
            }else{
                $checkUser = User::where('email', $user->email)->first();
                if($checkUser) {
                    $checkUser->google_id = $user->id;
                    $checkUser->save();
                    Auth::login($checkUser);
                } else {
                    $newUser = User::create([
                        'name' => $user->name,
                        'email' => $user->email,
                        'google_id'=> $user->id,
                        'password' => encrypt('123456dummy')
                    ]);
                    Auth::login($newUser);
                }
                return redirect('/');
            }
        } catch (Exception $e) {
            return Inertia::render('Auth/Login', [
                'canResetPassword' => Route::has('password.request'),
                'status' => 'Something Went wrong!! Try later',
            ]);
        }
    }
}
```
[Click Here] (https://www.devrohit.com/login-with-google-in-laravel/)