Skip to content

Commit 195aa55

Browse files
committed
Add SocialAuthController for Google authentication and update API routes
This commit introduces the SocialAuthController, which handles Google authentication by providing methods to redirect users to Google and handle the callback. It also updates the API routes to include endpoints for Google authentication, enhancing the application's social login capabilities.
1 parent 2bde1b4 commit 195aa55

File tree

2 files changed

+82
-1
lines changed

2 files changed

+82
-1
lines changed
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php
2+
3+
namespace App\Http\Controllers\Auth;
4+
5+
use App\Models\User;
6+
use Illuminate\Http\Request;
7+
use Illuminate\Support\Facades\Log;
8+
use App\Http\Controllers\Controller;
9+
use Illuminate\Http\RedirectResponse;
10+
use Laravel\Socialite\Facades\Socialite;
11+
12+
class SocialAuthController extends Controller
13+
{
14+
15+
16+
public function redirectToGoogle(Request $request)
17+
{
18+
// 1. Validation (s'assurer que l'URL d'origine est valide)
19+
$request->validate(['origin_url' => 'required|url']);
20+
$originUrl = $request->input('origin_url');
21+
22+
// 2. Stocker l'URL du frontend dans la session (ou passer un paramètre crypté dans 'state')
23+
// Utiliser la session est le plus simple pour cet exemple
24+
session()->put('socialite_origin_url', $originUrl);
25+
26+
// 3. Rediriger vers Google
27+
return Socialite::driver('google')->stateless()->redirect();
28+
}
29+
public function handleGoogleCallback(): RedirectResponse
30+
{
31+
$frontendUrl = env('FRONTEND_URL', 'http://localhost:3000');
32+
33+
try{
34+
$googleUser = Socialite::driver('google')->stateless()->user();
35+
} catch (\Exception $e) {
36+
Log::error("Erreur de callback Google: " . $e->getMessage());
37+
return redirect("{$frontendUrl}/login?error=google_auth_failed");
38+
}
39+
40+
$user = User::where('email', $googleUser->getEmail())->first();
41+
42+
if($user){
43+
if (is_null($user->google_id)) {
44+
$user->google_id = $googleUser->getId();
45+
}
46+
// Mettre à jour d'autres informations si nécessaire
47+
$user->save();
48+
}
49+
50+
$scope = $this->getUserScope($user->role_id);
51+
$tokenResult = $user->createToken('GoogleAuthToken', [$scope]);
52+
$token = $tokenResult->accessToken;
53+
54+
return redirect("{$frontendUrl}/auth/callback?token={$token}&user_id={$user->id}&role_id={$user->role_id}");
55+
}
56+
57+
protected function getUserScope(int $roleId): string
58+
{
59+
switch ($roleId) {
60+
case 1:
61+
return "admin";
62+
case 2:
63+
return "seller";
64+
case 3:
65+
return "customer";
66+
case 4:
67+
return "delivery";
68+
default:
69+
return "customer"; // Scope par défaut
70+
}
71+
}
72+
}

routes/api.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use App\Http\Controllers\User\ListOrderController;
2424
use App\Http\Controllers\User\ShowOrderController;
2525
use App\Http\Controllers\Admin\GiveCoinsController;
26+
use App\Http\Controllers\Auth\SocialAuthController;
2627
use App\Http\Controllers\Seller\BoostShopController;
2728
use App\Http\Controllers\Seller\CatalogueController;
2829
use App\Http\Controllers\Seller\OrderListController;
@@ -252,7 +253,7 @@
252253
Route::get('user/show/order/{id}', [ShowOrderController::class, 'showOrder']);
253254
Route::get('/list/orders', [ListOrderController::class, 'listOrder']);
254255
Route::get('/current/stats', [StatShopController::class, 'currentStats']);
255-
256+
256257
});
257258

258259

@@ -290,3 +291,11 @@
290291
Route::get('/delivery/stats/by-day',[StatOverviewController::class,'statsByDay']);
291292
});
292293

294+
295+
Route::prefix('auth/google')->group(function () {
296+
297+
Route::get('/', [SocialAuthController::class, 'redirectToGoogle']);
298+
Route::get('callback',[SocialAuthController::class,"handleGoogleCallback"]);
299+
});
300+
301+

0 commit comments

Comments
 (0)