Skip to content

Commit 7525e8f

Browse files
committed
feat(auth): 更新认证逻辑,简化返回的 token 结构并优化请求日志记录
1 parent c1febac commit 7525e8f

File tree

20 files changed

+126
-135
lines changed

20 files changed

+126
-135
lines changed

app/Actions/CreateRequestLogAction.php

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class CreateRequestLogAction
1717
];
1818

1919
public static array $hiddenRequestHeaders = [
20+
'cookie',
2021
'apikey',
2122
'api_token',
2223
'Authorization',
@@ -34,23 +35,21 @@ public function handle(Request $request, Response $response): void
3435
$duration = $startTime ? floor((microtime(true) - $startTime) * 1000) : null;
3536
$memory = memory_get_peak_usage(true);
3637

37-
$model = new RequestLog;
38-
$model->ip_address = $request->ip();
39-
$model->method = $request->method();
40-
$model->path = $request->path();
41-
$model->duration = $duration;
42-
$model->memory = $memory;
43-
$model->headers = $this->headers($request->headers->all());
44-
$model->payload = $this->payload($this->input($request));
45-
$model->response_status = $response->getStatusCode();
46-
$model->response_headers = $this->headers($response->headers->all());
47-
$model->response = $this->response($response);
48-
49-
if ($user = $request->user()) {
50-
$model->user()->associate($user);
51-
}
52-
53-
$model->save();
38+
$data = [
39+
'ip_address' => $request->ip(),
40+
'method' => $request->method(),
41+
'path' => $request->path(),
42+
'duration' => $duration,
43+
'memory' => $memory,
44+
'headers' => $this->headers($request->headers->all()),
45+
'payload' => $this->payload($this->input($request)),
46+
'response_status' => $response->getStatusCode(),
47+
'response_headers' => $this->headers($response->headers->all()),
48+
'response' => $this->response($response),
49+
'user_id' => $request->user() ? $request->user()->getKey() : null,
50+
];
51+
52+
RequestLog::create($data);
5453
}
5554

5655
protected function input(Request $request): array

app/Filters/UserFilter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class UserFilter implements Filter
1010
public function __invoke(Builder $query, $value, string $property)
1111
{
1212
return $query->whereHas($property, function (Builder $query) use ($value) {
13-
$query->whereAny(['nickname', 'name'], $value);
13+
$query->whereAny(['nickname', 'username'], $value);
1414
});
1515
}
1616
}

app/Http/Controllers/Api/Admin/AuthController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function login(LoginRequest $request)
3636
$token = $user->createToken('admin')->plainTextToken;
3737

3838
return UserResource::make($request->user())
39-
->additional(['meta' => ['token' => $token]]);
39+
->additional(['token' => $token]);
4040
}
4141

4242
public function logout(Request $request)

app/Http/Controllers/Api/Admin/IpController.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace App\Http\Controllers\Api\Admin;
44

55
use App\Actions\CreateIpAction;
6+
use App\Enums\IpStatus;
67
use App\Http\Controllers\Api\Controller;
78
use App\Http\Requests\IpRequest;
89
use App\Http\Resources\Admin\IpResource;
@@ -33,7 +34,7 @@ public function index(Request $request)
3334
$ips = QueryBuilder::for(Ip::class)
3435
->allowedFilters([
3536
AllowedFilter::exact('address'),
36-
AllowedFilter::exact('status')->default(1),
37+
AllowedFilter::exact('status')->default(IpStatus::Active->value),
3738
])
3839
->allowedSorts(['id', 'created_at', 'updated_at'])
3940
->allowedIncludes(['user', 'requestLogs'])

app/Http/Controllers/Api/V1/AuthController.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public function login(LoginRequest $request)
2626
$token = $user->createToken('api')->plainTextToken;
2727

2828
return UserResource::make($request->user())
29-
->additional(['meta' => ['token' => $token]]);
29+
->additional(['token' => $token]);
3030
}
3131

3232
/**

app/Listeners/RequestHandledListener.php

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ public function handle(RequestHandled $event): void
2020

2121
private function shouldLog(Request $request, Response $response): bool
2222
{
23-
$adminPrefix = config('app.route_prefix.admin');
24-
2523
if (strtoupper($request->method() === 'OPTIONS')) {
2624
return false;
2725
}
28-
if ($request->is($adminPrefix.'/*', 'locales/*')) {
26+
if (! $request->is('api/*')) {
2927
return false;
3028
}
3129

tests/Feature/Http/Api/Admin/AuthenticationLogController/IndexTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
$response = $this->getJson(route('admin.authentication-logs.index'));
1515

16-
$response->assertForbidden();
16+
$response->assertUnauthorized();
1717
});
1818

1919
test('returns a successful response', function () {
@@ -24,14 +24,14 @@
2424
$response = $this->getJson(route('admin.authentication-logs.index'));
2525

2626
$response->assertOk();
27-
$response->assertJson([
27+
$response->assertJsonStructure([
2828
'data' => [
2929
[
30-
'id' => $model->id,
31-
'ip_address' => $model->ip_address,
32-
'user_agent' => $model->user_agent,
33-
'successful' => $model->successful,
34-
'created_at' => $model->created_at->toISOString(),
30+
'id',
31+
'ip_address',
32+
'user_agent',
33+
'successful',
34+
'created_at',
3535
],
3636
],
3737
]);

tests/Feature/Http/Api/Admin/AuthenticationLogController/ShowTest.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
$response = $this->getJson(route('admin.authentication-logs.show', $model));
1919

20-
$response->assertForbidden();
20+
$response->assertUnauthorized();
2121
});
2222

2323
test('returns a successful response', function () {
@@ -28,13 +28,13 @@
2828
$response = $this->getJson(route('admin.authentication-logs.show', $model));
2929

3030
$response->assertOk();
31-
$response->assertJson([
31+
$response->assertJsonStructure([
3232
'data' => [
33-
'id' => $model->id,
34-
'ip_address' => $model->ip_address,
35-
'user_agent' => $model->user_agent,
36-
'successful' => $model->successful,
37-
'created_at' => $model->created_at->toISOString(),
33+
'id',
34+
'ip_address',
35+
'user_agent',
36+
'successful',
37+
'created_at',
3838
],
3939
]);
4040
});

tests/Feature/Http/Api/Admin/IpController/DestroyTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
$response = $this->deleteJson(route('admin.ips.destroy', $model));
1919

20-
$response->assertForbidden();
20+
$response->assertUnauthorized();
2121
});
2222

2323
test('returns a successful response', function () {

tests/Feature/Http/Api/Admin/IpController/IndexTest.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,25 @@
1313

1414
$response = $this->getJson(route('admin.ips.index'));
1515

16-
$response->assertForbidden();
16+
$response->assertUnauthorized();
1717
});
1818

1919
test('returns a successful response', function () {
2020
$this->actingAsAdmin();
2121

22-
$model = Ip::factory()->create();
22+
$model = Ip::factory()->active()->create();
2323

2424
$response = $this->getJson(route('admin.ips.index'));
2525

2626
$response->assertOk();
27-
$response->assertJson([
27+
$response->assertJsonStructure([
2828
'data' => [
2929
[
30-
'id' => $model->id,
31-
'address' => $model->address,
32-
'location' => $model->location,
33-
'status' => $model->status->value,
34-
'remark' => $model->remark,
30+
'id',
31+
'address',
32+
'location',
33+
'status',
34+
'remark',
3535
],
3636
],
3737
]);

0 commit comments

Comments
 (0)