Skip to content

Commit 5f688f1

Browse files
committed
update
1 parent d95acf4 commit 5f688f1

File tree

7 files changed

+163
-67
lines changed

7 files changed

+163
-67
lines changed

app/Http/Controllers/Auth/CheckTokenValidityController.php

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,51 @@ class CheckTokenValidityController extends Controller
99
{
1010
public function checkIsAuthenticated(Request $request)
1111
{
12-
return response()->json(['isAuthenticated' => true]);
12+
$origin = $request->headers->get('origin');
13+
14+
// 2️⃣ Déterminer quel cookie utiliser selon le sous-domaine
15+
if (str_contains($origin, 'seller.akevas.com')) {
16+
$cookieNameAccess = 'accessTokenSeller';
17+
} elseif (str_contains($origin, 'delivery.akevas.com')) {
18+
$cookieNameAccess = 'accessTokenDelivery';
19+
} elseif (str_contains($origin, 'localhost')) {
20+
// En local, on suppose qu’on teste le vendeur
21+
$cookieNameAccess = 'accessTokenSeller';
22+
} else {
23+
$cookieNameAccess = 'accessToken';
24+
}
25+
26+
// 3️⃣ Vérifier si le cookie du bon type est présent
27+
$tokenFound = $request->cookie($cookieNameAccess);
28+
29+
if (!$tokenFound) {
30+
return response()->json([
31+
'isAuthenticated' => false,
32+
'reason' => "no_cookie_for_{$cookieNameAccess}",
33+
'host' => $origin
34+
]);
35+
}
36+
37+
// 4️⃣ Injecter le token dans le header Authorization
38+
$request->headers->set('Authorization', 'Bearer ' . $tokenFound);
39+
40+
// 5️⃣ Authentifier via le guard 'api'
41+
$user = Auth::guard('api')->user();
42+
43+
if ($user) {
44+
return response()->json([
45+
'isAuthenticated' => true,
46+
'role' => $user->role ?? 'unknown',
47+
'domain' => $origin,
48+
]);
49+
}
50+
51+
// 6️⃣ Token invalide ou expiré
52+
return response()->json([
53+
'isAuthenticated' => false,
54+
'reason' => 'invalid_or_expired_token',
55+
'host' => $origin
56+
]);
57+
1358
}
1459
}

app/Http/Controllers/Auth/LoginController.php

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66
use Carbon\Carbon;
77
use Illuminate\Http\Request;
88
use App\Services\Auth\LoginService;
9-
use App\Http\Controllers\Controller;
9+
use Illuminate\Support\Facades\Log;
1010

11+
use App\Http\Controllers\Controller;
1112
use App\Repositories\GetClientRepository;
1213
use App\Services\Auth\GenerateTokenUserService;
1314

@@ -32,32 +33,50 @@ public function login(Request $request){
3233
if($request->role_id != $loginUser['role_id']){
3334
return response()->json(['message'=>"vous n'avez pas les droits d'acces à cette application"], 403);
3435
}
35-
if($request->role_id==1 || $request->role_id==3){
36-
$accessTokenName="accessToken";
37-
$refreshTokenName="refreshToken";
38-
}else if ($request->role_id==2){
39-
$accessTokenName="accessTokenSeller";
40-
$refreshTokenName="refreshTokenSeller";
41-
}else{
42-
$accessTokenName="accessTokenDelivery";
43-
$refreshTokenName="refreshTokenDelivery";
44-
}
4536
$tokenUser=(new GenerateTokenUserService())->generate($client,$loginUser,$data['password'],$request);
4637

4738
$tokenData = json_decode($tokenUser->getContent(), true);
48-
39+
$origin = $request->headers->get('origin');
40+
4941
if ($tokenUser->getStatusCode() === 200) {
5042
$accessToken = $tokenData['access_token'];
5143
$refreshToken = $tokenData['refresh_token'];
5244

53-
$domain = (config('app.env') === 'production') ? '.akevas.com' : null;
45+
$domain = '.akevas.com';
5446
$secure = config('app.env') === 'production';
5547

56-
return response()->noContent(204)->cookie($accessTokenName, $accessToken,
57-
Carbon::now()->addMinutes(config('passport.token_ttl'))->timestamp,
48+
if (config('app.env') === 'production') {
49+
50+
51+
if (str_contains($origin, 'seller.akevas.com')) {
52+
53+
$cookieNameAccess = 'accessTokenSeller';
54+
55+
$cookieNameRefresh = 'refreshTokenSeller';
56+
} elseif (str_contains($origin, 'delivery.akevas.com')) {
57+
$cookieNameAccess = 'accessTokenDelivery';
58+
$cookieNameRefresh = 'refreshTokenDelivery';
59+
} else if (str_contains($origin, 'localhost')) {
60+
$cookieNameAccess = 'accessTokenSeller';
61+
$cookieNameRefresh = 'refreshTokenSeller';
62+
} else {
63+
$cookieNameAccess = 'accessToken';
64+
$cookieNameRefresh = 'refreshToken';
65+
}
66+
}
67+
Log::info('Seller origin: ' . $cookieNameAccess,[
68+
'cookieNameAccess' => $cookieNameAccess,
69+
'cookieNameRefresh' => $cookieNameRefresh,
70+
'accessToken' => $accessToken,
71+
'refreshToken' => $refreshToken,
72+
'domain' => $domain,
73+
'secure' => $secure,
74+
]);
75+
return response()->json(['message' => 'Login success'], 200)->cookie($cookieNameAccess, $accessToken,
76+
config('passport.token_ttl'),
5877
'/', $domain, $secure, true, false, 'none')
59-
->cookie($refreshTokenName, $refreshToken,
60-
Carbon::now()->addDays(30)->timestamp,
78+
->cookie($cookieNameRefresh, $refreshToken,
79+
60*24*30,
6180
'/', $domain, $secure, true, false, 'none');
6281
}
6382

app/Http/Controllers/Auth/LogoutController.php

Lines changed: 59 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,34 +10,65 @@
1010

1111
class LogoutController extends Controller
1212
{
13-
public function logout(){
14-
$user = Auth::guard('api')->user();
15-
$user->token()->revoke();
13+
public function logout(Request $request)
14+
{
15+
// 🔹 Récupérer le user connecté
16+
$user = Auth::guard('api')->user();
17+
18+
if ($user && $user->token()) {
19+
$user->token()->revoke();
20+
}
21+
22+
// 🔹 Déterminer l'origine / host
23+
$origin = $request->headers->get('origin') ?? $request->getHost();
24+
25+
// 🔹 Définir les noms de cookies selon le sous-domaine
26+
if (str_contains($origin, 'seller.akevas.com')) {
27+
$cookieNameAccess = 'accessTokenSeller';
28+
$cookieNameRefresh = 'refreshTokenSeller';
29+
} elseif (str_contains($origin, 'delivery.akevas.com')) {
30+
$cookieNameAccess = 'accessTokenDelivery';
31+
$cookieNameRefresh = 'refreshTokenDelivery';
32+
} elseif (str_contains($origin, 'localhost')) {
33+
// cas local
34+
$cookieNameAccess = 'accessTokenSeller';
35+
$cookieNameRefresh = 'refreshTokenSeller';
36+
} else {
37+
// domaine par défaut (client ou autre)
38+
$cookieNameAccess = 'accessToken';
39+
$cookieNameRefresh = 'refreshToken';
40+
}
41+
42+
// 🔹 Déterminer le domaine du cookie (production ou local)
1643
$domain = (config('app.env') === 'production') ? '.akevas.com' : null;
17-
$secure = config('app.env') === 'production';
18-
19-
if($user->role_id==1 || $user->role_id==3){
20-
$accessTokenName="accessToken";
21-
$refreshTokenName="refreshToken";
22-
}else if ($user->role_id==2){
23-
$accessTokenName="accessTokenSeller";
24-
$refreshTokenName="refreshTokenSeller";
25-
}else{
26-
$accessTokenName="accessTokenDelivery";
27-
$refreshTokenName="refreshTokenDelivery";
28-
}
29-
// 3. Définir la date d'expiration dans le passé (expire immédiatement)
30-
$pastExpiration = Carbon::now()->subMinutes(5)->timestamp;
31-
32-
// 4. Construire la réponse (statut 204 No Content est courant pour le logout)
33-
return response()->noContent(204)
34-
// 5. Faire expirer l'accessToken
35-
->cookie($accessTokenName, null,
36-
$pastExpiration,
37-
'/', $domain, $secure, true, false, 'none') // Utiliser les mêmes paramètres que la pose
38-
// 6. Faire expirer le refreshToken
39-
->cookie($refreshTokenName, null,
40-
$pastExpiration,
41-
'/', $domain, $secure, true, false, 'none');
44+
$secure = config('app.env') === 'production';
45+
46+
// 🔹 Expiration passée pour supprimer le cookie
47+
$expiredAt = Carbon::now()->subMinutes(5)->timestamp;
48+
49+
// 🔹 Retourner la réponse avec suppression des deux cookies
50+
return response()->json(['message' => 'Déconnexion réussie.'], 200)
51+
->cookie(
52+
$cookieNameAccess,
53+
null,
54+
$expiredAt,
55+
'/',
56+
$domain,
57+
$secure, // secure: true en production
58+
true, // httpOnly
59+
false, // raw
60+
'none' // sameSite
61+
)
62+
->cookie(
63+
$cookieNameRefresh,
64+
null,
65+
$expiredAt,
66+
'/',
67+
$domain,
68+
$secure,
69+
true,
70+
false,
71+
'none'
72+
);
4273
}
4374
}

app/Http/Controllers/Auth/SocialAuthController.php

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,17 +51,6 @@ public function handleGoogleCallback(): RedirectResponse
5151
return redirect("{$frontendUrl}/login?code=401");
5252
}
5353

54-
if($user->role_id==1 || $user->role_id==3){
55-
$accessTokenName="accessToken";
56-
$refreshTokenName="refreshToken";
57-
}else if ($user->role_id==2){
58-
$accessTokenName="accessTokenSeller";
59-
$refreshTokenName="refreshTokenSeller";
60-
}else{
61-
$accessTokenName="accessTokenDelivery";
62-
$refreshTokenName="refreshTokenDelivery";
63-
}
64-
6554
$scope = $this->getUserScope($user->role_id);
6655
$tokenResult = $user->createToken('GoogleAuthToken', [$scope]);
6756
$accessToken = $tokenResult->accessToken;
@@ -73,10 +62,10 @@ public function handleGoogleCallback(): RedirectResponse
7362
$secure = config('app.env') === 'production';
7463

7564

76-
return redirect("{$frontendUrl}/authenticate")->cookie($accessTokenName, $accessToken,
65+
return redirect("{$frontendUrl}/authenticate")->cookie('accessToken', $accessToken,
7766
Carbon::now()->addMinutes(config('passport.token_ttl'))->timestamp,
7867
'/', $domain, $secure, true, false, 'none') // ttl, path, domain, secure, httpOnly, raw, sameSite
79-
->cookie($refreshTokenName, $refreshToken,
68+
->cookie('refreshToken', $refreshToken,
8069
Carbon::now()->addDays(30)->timestamp, // Longue durée de vie
8170
'/', $domain, $secure, true, false, 'none');
8271
}

app/Http/Kernel.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,6 @@ class Kernel extends HttpKernel
7272
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
7373
'scopes' => \Laravel\Passport\Http\Middleware\CheckScopes::class,
7474
'scope' => \Laravel\Passport\Http\Middleware\CheckForAnyScope::class,
75-
'isSeller'=>UserIsSeller::class
75+
'isSeller'=>UserIsSeller::class,
7676
];
7777
}

app/Http/Middleware/AttachAccessTokenFromCookieUser.php

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,23 @@ class AttachAccessTokenFromCookieUser
1010

1111
public function handle(Request $request, Closure $next)
1212
{
13+
$host = $request->headers->get('origin');
14+
15+
if (str_contains($host, 'seller.akevas.com')) {
16+
$cookieName = 'accessTokenSeller';
17+
} elseif (str_contains($host, 'delivery.akevas.com')) {
18+
$cookieName = 'accessTokenDelivery';
19+
} elseif (str_contains($host, 'localhost:5173')) {
20+
$cookieName = 'accessTokenSeller';
21+
}
22+
else {
23+
$cookieName = 'accessToken'; // client / admin
24+
}
1325
// 1. Vérifier si l'en-tête Authorization est déjà présent (pour ne pas écraser)
14-
if (!$request->headers->has('Authorization') && $request->cookie('accessToken')) {
26+
if (!$request->headers->has('Authorization') && $request->cookie($cookieName)) {
1527

1628
// 2. Lire le token depuis le cookie 'accessToken'
17-
$accessToken = $request->cookie('accessToken');
29+
$accessToken = $request->cookie($cookieName);
1830

1931
// 3. Injecter le token dans l'en-tête Authorization au format Bearer
2032
$request->headers->set('Authorization', 'Bearer ' . $accessToken);

routes/api.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@
172172
Route::get('/attributes/value/by/group/{id}',[ListCategoryController::class,"getAttributeValueByAttributeId"]);
173173
Route::get('/categories/attributes',[ListCategoryController::class,"getCategoriesWithAttributes"]);
174174

175-
Route::middleware(['auth:api', 'scopes:seller', "isSeller"])->prefix('v1')->group(function () {
175+
Route::middleware(["auth:api", 'scopes:seller', "isSeller", "verify.role"])->prefix('v1')->group(function () {
176176
Route::post("init/payment/subscription/product", [SubscribeProductController::class, "initPay"]);
177177
Route::post('init/payment/subscription/product/pending/{membership_id}/{product_id}/{transaction_ref}', [SubscribeProductController::class, 'initPaymentPending']);
178178
Route::post("check/payment/subscription/product/callback", [SubscribeProductController::class, "paymentCallBack"]);
@@ -204,7 +204,7 @@
204204
Route::post("/delivery/update/docs",[UpdateDeliveryController::class,'updateDocuments']);
205205
});
206206

207-
Route::middleware(['auth_seller','auth:api', 'scopes:seller'])->prefix('v1')->group(function () {
207+
Route::middleware(["auth:api", 'scopes:seller'])->prefix('v1')->group(function () {
208208
Route::get('/current/seller', [CurrentSellerController::class, 'currentSeller']);
209209
Route::post('update/seller',[CurrentSellerController::class,'updateSeller']);
210210
Route::get('/seller/notifications',[ListNotificationController::class,'list']);
@@ -213,7 +213,7 @@
213213
Route::post("/update/docs",[UpdateSellerController::class,'updateDocuments']);
214214
});
215215

216-
Route::middleware(['auth:api', 'scopes:admin'])->prefix('v1')->group(function () {
216+
Route::middleware(["auth:api", 'scopes:admin'])->prefix('v1')->group(function () {
217217
Route::post('/decline/or/validate/{reviewId}/{status}',[DeclineOrValidateReviewController::class,'declineOrValidate']);
218218
Route::post('/decline/or/validate/shop/review/{reviewId}/{status}',[DeclineOrValidateShopReviewController::class,'declineOrValidate']);
219219
Route::get('/recent/products', [RecentProductController::class, 'index']);
@@ -248,7 +248,7 @@
248248
Route::post('update/category/{id}', [CategoryController::class, 'update']);
249249
});
250250

251-
Route::middleware(['auth:api', 'scopes:customer'])->prefix('v1')->group(function () {
251+
Route::middleware(["auth:api", 'scopes:customer'])->prefix('v1')->group(function () {
252252
Route::get('/recent/orders', [RecentOrderController::class, 'recentOrders']);
253253
Route::get('user/show/order/{id}', [ShowOrderController::class, 'showOrder']);
254254
Route::get('/list/orders', [ListOrderController::class, 'listOrder']);
@@ -277,7 +277,7 @@
277277
Route::post('/payin',[PayinController::class,'payin']);
278278
});
279279

280-
Route::middleware(['auth:api', 'scopes:delivery'])->prefix('v1')->group(function () {
280+
Route::middleware(["auth:api", 'scopes:delivery'])->prefix('v1')->group(function () {
281281

282282
Route::get('/preference/orders', [GetPreferenceOrderController::class, 'getPreferenceOrders']);
283283
Route::get('/current/delivery', [DeliveryProfileController::class, 'currentDelivery']);

0 commit comments

Comments
 (0)