Bài tập

Hướng dẫn đăng nhập và đăng ký bằng tài khoản Google Gmail trong Laravel 5.8

Huy Erick

Trong bài viết này, chúng ta sẽ tìm hiểu cách đăng nhập bằng tài khoản Google Gmail trong Laravel 5.8 sử dụng package laravel/socialite. Bạn sẽ được hướng dẫn chi tiết về cách cài đặt...

Trong bài viết này, chúng ta sẽ tìm hiểu cách đăng nhập bằng tài khoản Google Gmail trong Laravel 5.8 sử dụng package laravel/socialite. Bạn sẽ được hướng dẫn chi tiết về cách cài đặt và sử dụng package này để dễ dàng đăng nhập và đăng ký bằng tài khoản Google Gmail trong Laravel.

Bước 1: Cài đặt Laravel 5.8

Đầu tiên, bạn cần cài đặt Laravel 5.8 nếu chưa có. Bạn có thể chạy lệnh sau để tạo một ứng dụng Laravel 5.8 mới:

composer create-project -prefer-dist laravel/laravel googleLogin

Bước 2: Cài đặt Package laravel/socialite

Tiếp theo, chúng ta cần cài đặt package laravel/socialite để kết nối với tài khoản Google. Bạn có thể chạy lệnh Composer sau để cài đặt package này:

composer require laravel/socialite

Sau khi cài đặt thành công, hãy thêm dòng sau vào file config/app.php:

'providers' => [
    ...
    Laravel\Socialite\SocialiteServiceProvider::class,
],

'aliases' => [
    ...
    'Socialite' => Laravel\Socialite\Facades\Socialite::class,
],

Bước 3: Tạo ứng dụng Google API

Trước khi bắt đầu đăng nhập bằng tài khoản Google, bạn cần tạo một ứng dụng Google API. Nếu bạn chưa có tài khoản ứng dụng Google API, bạn có thể tạo từ Google Developers Console.

Bước tiếp theo, bạn cần nhấp vào Credentials và chọn tùy chọn oAuth. Sau đó, nhấp vào nút Create new Client ID.

Sau khi tạo tài khoản, hãy sao chép App ID và thêm vào file config/services.php:

'google' => [
    'client_id' => 'app id',
    'client_secret' => 'add secret',
    'redirect' => 'http://learnl52.hd/auth/google/callback',
],

Bước 4: Thêm cột cơ sở dữ liệu

Chúng ta cần thêm cột google_id vào bảng người dùng. Bạn có thể chạy lệnh sau để tạo migration mới:

php artisan make:migration add_google_id_column

Sau đó, hãy mở file migration vừa tạo và thêm đoạn mã sau:

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

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()
    {
        //
    }
}

Tiếp theo, hãy mở file app/User.php và thêm 'google_id' vào $fillable:

protected $fillable = [
    'name', 'email', 'password', 'google_id'
];

Bước 5: Tạo Routes

Thêm các route sau vào file routes/web.php:

Route::get('google', function () {
    return view('googleAuth');
});

Route::get('auth/google', 'Auth\LoginController@redirectToGoogle');
Route::get('auth/google/callback', 'Auth\LoginController@handleGoogleCallback');

Bước 6: Thêm vào controller

Chúng ta cần thêm phương thức google auth vào file app/Http/Controllers/Auth/LoginController.php:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Socialite;
use Auth;
use Exception;
use App\User;

class LoginController extends Controller
{
    use AuthenticatesUsers;

    /**
     * Where to redirect users after login.
     *
     * @var string
     */
    protected $redirectTo = '/home';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    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('/home');
            }else{
                $newUser = User::create([
                    'name' => $user->name,
                    'email' => $user->email,
                    'google_id'=> $user->id
                ]);

                Auth::login($newUser);
                return redirect()->back();
            }
        } catch (Exception $e) {
            return redirect('auth/google');
        }
    }
}

Bước 7: Tạo tập tin Blade

Tạo file resources/views/googleAuth.blade.php với nội dung sau:



    Laravel 5.8 Login with Google Account Example


    

Chúc bạn thành công!

1