Skip to main content
  1. Artikel-artikel/
  2. Framework Php/

Tutorial Laravel 11 Sharing Auth 2

·470 words·3 mins· loading · loading · ·
Development Php Framework Laravel
Humaedi
Author
Humaedi
Halo, nama saya Humaedi 👋. Saya seorang CEO of Akaktekno.id & { full-stack developer } Bekerjalah seakan hidup abadi, beribadah seakan mau mati, jangan lupa☕️ untuk mendapat inspirasi.
tutorial-laravel-11-sharing-auth - This article is part of a series.
Part : This Article

Halo para seniman yang budiman! Kita kembali pada bagian kedua dari seri artikel tentang integrasi autentikasi sosial menggunakan Laravel Socialite dan berbagi sesi antar aplikasi Laravel dengan token JWT. Pada bagian sebelumnya, kita telah membahas implementasi pada aplikasi account.example.test. Sekarang, kita akan mengarahkan perhatian kita pada aplikasi kedua, yaitu app.example.test. Mari kita lanjutkan dengan langkah-langkah yang perlu dilakukan untuk mengintegrasikan autentikasi sosial dan berbagi sesi di aplikasi ini.

Membuat middleware untuk check token
#

Jalan perintah dibawah ini untuk membuat middleware

php artisan make:middleware

Mendaftarkan middleware di laravel 11 bootstrap\app.php, jika menggunakan versi dibawahnya dilahkan masukan di sini app/Http/Kernel.php

// Laravel 11
->withMiddleware(function (Middleware $middleware) {
	$middleware->alias([
		'auth' => App\Http\Middleware\CheckAutoLogin::class,
	]);
})

// Laravel 10
protected $middlewareAliases = [
	'auth' => App\Http\Middleware\CheckAutoLogin::class,
]

// Laravel 7+
protected $routeMiddleware = [	
	'auth' => App\Http\Middleware\CheckAutoLogin::class,
]

Setelah mendaftarakan middleware nya silahkan buka file yang sudah di buat App\Http\Middleware\CheckAutoLogin.php dan ubah kodenya menjadi seperti berikut:

$token = Cookie::get('nama-token-jwt');
if ($token) {
	try {
		// Decode token JWT
		$decoded = JWT::decode($token, new Key('secret-your-key', 'HS256'));
		$userId = $decoded->sub;
		// Cari pengguna berdasarkan ID
		$user = User::find($userId);
		if ($user) {
			Auth::login($user); 
		} else {
			dd("Pengguna tidak ditemukan atau aksi tambahan lainnya");
		}
	} catch (\Exception $e) {
		dd("Gagal Login ".$token);
	}
} else {
	return redirect()->to('https://account.example.test/login');
}
return $next($request);

Selanjutnya buat route di routes/web.php dengan methode get

Route::get('/oauth', function () {
	return view('dashboard');
})->middleware(CheckAutoLogin::class);
// -- OR --
Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware('auth');
// -- OR --
Route::middleware(['auth'])->group(function () {
	Route::get('dashboard', function () {
		return view('dashboard');
	});
});

// Opsional
// Route untuk cek cookie atau gunakan `inspect` or `inspect element` di browser
Route::get('/get-cookie', function () {
	return Cookie::get('nama-token-jwt');
});

Jika sekarang anda mencoba untuk mengakses get-cookies ini tidak akan berhasil sebab connection DB belum di setting untuk bisa saling berbagi session. maka dari itu kita akan menambahkan database ke dua untuk berbagi session dari aplikasi satu ke yang lainnya.

Tambah database connection
#

'common_database' => [
		'driver' => 'mysql',
		'url' => env('COMMON_DB_URL'),
		'host' => env('COMMON_DB_HOST', '127.0.0.1'),
		'port' => env('COMMON_DB_PORT', '3306'),
		'database' => env('COMMON_DB_DATABASE', 'laravel'),
		'username' => env('COMMON_DB_USERNAME', 'root'),
		'password' => env('COMMON_DB_PASSWORD', ''),
		'unix_socket' => env('COMMON_DB_SOCKET', ''),
		'charset' => env('COMMON_DB_CHARSET', 'utf8mb4'),
		'collation' => env('COMMON_DB_COLLATION', 'utf8mb4_unicode_ci'),
		'prefix' => '',
		'prefix_indexes' => true,
		'strict' => true,
		'engine' => null,
		'options' => extension_loaded('pdo_mysql') ? array_filter([
			PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
		]) : [],
],

Setelah menambahkan configurasi database selanjut nya tambahkan connection ke table user.php karena kita ingin aplikasi akan mengkonsumsi user pada aplikasi account.example.test.

// Models/User.php
protected $connection = 'common_database';

Setting connection database di .env untuk mencoba menghubungkan pada database aplikasi account.example.php

COMMON_DB_CONNECTION=mysql
COMMON_DB_HOST=127.0.0.1
COMMON_DB_PORT=3306
COMMON_DB_DATABASE=laravel_pos
COMMON_DB_USERNAME=root
COMMON_DB_PASSWORD=

SESSION_DRIVER=database
SESSION_DOMAIN=".example.test"

Warning! Hati-hati dengan issue keamanan mengenai token JWT dan Sharing Cookies authentikasi!
Selamat mencoba dan semoga berhasil! Kita akhiri dulu pembahasan pada bagian ini. Nantikan topik manarik lainnya. Sampai jumpa di artikel berikutnya, dan terima kasih sudah membaca!

tutorial-laravel-11-sharing-auth - This article is part of a series.
Part : This Article

Related

Tutorial Laravel 11 Sharing Auth 1
·703 words·4 mins· loading · loading
Development Php Framework Laravel
Halo para seniman yang budiman!
Mapping Multiple Markers Coordinate
·479 words·3 mins· loading · loading
Openstreetmaps Mapping Multiple-Markers Gmaps Lang-Lat
Halo para seniman yang budiman!