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!