@@ -19,28 +19,39 @@ public function redirectToGoogle(Request $request)
1919 // 1. Validation (s'assurer que l'URL d'origine est valide)
2020 $ request ->validate (['origin_url ' => 'required|url ' ]);
2121 $ originUrl = $ request ->input ('origin_url ' );
22-
2322 // 2. Stocker l'URL du frontend dans la session (ou passer un paramètre crypté dans 'state')
2423 // Utiliser la session est le plus simple pour cet exemple
25- session ()->put ('socialite_origin_url ' , $ originUrl );
26-
24+ $ state = base64_encode (json_encode ([
25+ 'origin_url ' => $ originUrl
26+ ]));
2727 // 3. Rediriger vers Google
28- return Socialite::driver ('google ' )->stateless ()->redirect ();
28+ return Socialite::driver ('google ' )->stateless ()->with ([ ' state ' => $ state ]) -> redirect ();
2929}
3030 public function handleGoogleCallback (Request $ request ): RedirectResponse
3131 {
32- $ frontendUrl = env ( ' FRONTEND_URL ' , ' http://localhost:3000 ' );
33-
32+ $ stateData = json_decode ( base64_decode ( $ request -> input ( ' state ' )), true );
33+ $ originUrl = $ stateData [ ' origin_url ' ] ?? null ;
3434 try {
3535 $ googleUser = Socialite::driver ('google ' )->stateless ()->user ();
3636 } catch (\Exception $ e ) {
3737 Log::error ("Erreur de callback Google: " . $ e ->getMessage ());
38- return redirect ("{$ frontendUrl }/login?error=google_auth_failed " );
38+ return redirect ("{$ originUrl }/login?error=google_auth_failed " );
3939 }
4040 $ email = $ googleUser ->getEmail ();
4141 $ user = User::where ('email ' , $ email )->first ();
42-
42+ $ role_id = 0 ;
4343 if ($ user ){
44+ if (str_contains ($ originUrl , 'seller.akevas.com ' )) {
45+ $ frontendUrl = "https://seller.akevas.com " ;
46+ $ role_id = 2 ;
47+ } elseif (str_contains ($ originUrl , 'delivery.akevas.com ' )) {
48+ $ frontendUrl = "https://delivery.akevas.com " ;
49+ $ role_id = 4 ;
50+ } else {
51+ $ frontendUrl = "https://akevas.com " ;
52+ $ role_id = 3 ;
53+ }
54+
4455 if (is_null ($ user ->google_id )) {
4556 $ user ->google_id = $ googleUser ->getId ();
4657 }
@@ -51,7 +62,11 @@ public function handleGoogleCallback(Request $request): RedirectResponse
5162 return redirect ("{$ frontendUrl }/login?code=401 " );
5263 }
5364
54- $ scope = $ this ->getUserScope ($ user ->role_id );
65+ if ($ user ->role_id != $ role_id ){
66+
67+ return redirect ("{$ frontendUrl }/login?code=500 " );
68+ }else {
69+ $ scope = $ this ->getUserScope ($ user ->role_id );
5570 $ tokenResult = $ user ->createToken ('GoogleAuthToken ' , [$ scope ]);
5671 $ accessToken = $ tokenResult ->accessToken ;
5772
@@ -61,15 +76,15 @@ public function handleGoogleCallback(Request $request): RedirectResponse
6176 $ domain = (config ('app.env ' ) === 'production ' ) ? '.akevas.com ' : null ;
6277 $ secure = config ('app.env ' ) === 'production ' ;
6378
64- $ origin = $ request ->headers ->get ('origin ' );
6579
66- if (str_contains ($ origin , 'seller.akevas.com ' )){
80+
81+ if (str_contains ($ originUrl , 'seller.akevas.com ' )){
6782 $ cookieNameAccess = 'accessTokenSeller ' ;
6883 $ cookieNameRefresh = 'refreshTokenSeller ' ;
69- }elseif (str_contains ($ origin , 'delivery.akevas.com ' )){
84+ }elseif (str_contains ($ originUrl , 'delivery.akevas.com ' )){
7085 $ cookieNameAccess = 'accessTokenDelivery ' ;
7186 $ cookieNameRefresh = 'refreshTokenDelivery ' ;
72- }else if (str_contains ($ origin , 'localhost ' )) {
87+ }else if (str_contains ($ originUrl , 'localhost ' )) {
7388 $ cookieNameAccess = 'accessTokenSeller ' ;
7489 $ cookieNameRefresh = 'refreshTokenSeller ' ;
7590 }else {
@@ -82,6 +97,8 @@ public function handleGoogleCallback(Request $request): RedirectResponse
8297 ->cookie ($ cookieNameRefresh , $ refreshToken ,
8398 60 *24 *30 , // Longue durée de vie
8499 '/ ' , $ domain , $ secure , true , false , 'none ' );
100+ }
101+
85102 }
86103
87104 protected function getUserScope (int $ roleId ): string
0 commit comments