feat: 添加 JWT 支持与开发环境配置,更新 API 路由与中间件
This commit is contained in:
@@ -6,7 +6,10 @@ use App\Http\Controllers\Controller;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
/** 探路由用,上线前可删除或改为需登录 */
|
||||
/**
|
||||
* 无需登录(当前 admin 中间件为直通):确认 `/api/v1/admin` 前缀可达。
|
||||
* 路由:GET /api/v1/admin/ping
|
||||
*/
|
||||
class PingController extends Controller
|
||||
{
|
||||
public function __invoke(): JsonResponse
|
||||
|
||||
@@ -10,6 +10,8 @@ class HealthController extends Controller
|
||||
{
|
||||
/**
|
||||
* 健康检查(Next / 网关探活)。路径:GET /api/v1/health
|
||||
*
|
||||
* 非调试环境不返回框架版本号,避免信息泄露。
|
||||
*/
|
||||
public function __invoke(): JsonResponse
|
||||
{
|
||||
@@ -19,7 +21,7 @@ class HealthController extends Controller
|
||||
];
|
||||
|
||||
if (config('app.debug')) {
|
||||
$payload['laravel'] = app()->version();
|
||||
$payload['laravel'] = app()->version(); // 仅本地/调试
|
||||
}
|
||||
|
||||
return ApiResponse::success($payload);
|
||||
|
||||
33
app/Http/Controllers/Api/V1/Player/MeController.php
Normal file
33
app/Http/Controllers/Api/V1/Player/MeController.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api\V1\Player;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
/**
|
||||
* 鉴权自检:返回当前 Token 对应的玩家公开字段(不含密码)。
|
||||
*
|
||||
* 路由:GET /api/v1/player/me ,需 middleware lottery.player。
|
||||
*/
|
||||
class MeController extends Controller
|
||||
{
|
||||
public function __invoke(Request $request): JsonResponse
|
||||
{
|
||||
$player = $request->lotteryPlayer();
|
||||
// 理论上不会为 null(路由已套 EnsurePlayerApi);保留断言便于排查配置错误
|
||||
abort_if($player === null, 500, 'lottery_player missing');
|
||||
|
||||
return ApiResponse::success([
|
||||
'id' => $player->id,
|
||||
'site_code' => $player->site_code,
|
||||
'site_player_id' => $player->site_player_id,
|
||||
'username' => $player->username,
|
||||
'nickname' => $player->nickname,
|
||||
'default_currency' => $player->default_currency,
|
||||
'status' => $player->status,
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -6,7 +6,10 @@ use App\Http\Controllers\Controller;
|
||||
use App\Support\ApiResponse;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
|
||||
/** 探路由用,上线前可删除或改为需登录 */
|
||||
/**
|
||||
* 无需登录:仅供网关/前端确认「玩家 API 前缀」可达。
|
||||
* 路由:GET /api/v1/player/ping
|
||||
*/
|
||||
class PingController extends Controller
|
||||
{
|
||||
public function __invoke(): JsonResponse
|
||||
|
||||
@@ -7,7 +7,9 @@ use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
/**
|
||||
* 后台 API:后续在此校验管理员登录(如 Sanctum)与 RBAC。
|
||||
* 后台 API 守卫:后续在此注入 Sanctum(admin_users)与权限校验。
|
||||
*
|
||||
* 当前为占位直通,勿在生产暴露敏感 admin 路由前长期保持空实现。
|
||||
*/
|
||||
class EnsureAdminApi
|
||||
{
|
||||
|
||||
@@ -2,17 +2,32 @@
|
||||
|
||||
namespace App\Http\Middleware;
|
||||
|
||||
use App\Exceptions\PlayerAuthenticationException;
|
||||
use App\Services\PlayerTokenResolver;
|
||||
use App\Support\ApiResponse;
|
||||
use Closure;
|
||||
use Illuminate\Http\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
/**
|
||||
* 玩家端 API:后续在此校验 SSO / Bearer Token,并解析当前 players.id。
|
||||
* 玩家端受保护路由前置:解析 Authorization,失败时直接返回 { code, msg, data },不进入控制器。
|
||||
*
|
||||
* 成功后在 request 上挂 `lottery_player`,控制器内使用 `$request->lotteryPlayer()`
|
||||
*(由 AppServiceProvider 注册的宏,返回 ?Player)。
|
||||
*/
|
||||
class EnsurePlayerApi
|
||||
{
|
||||
public function handle(Request $request, Closure $next): Response
|
||||
{
|
||||
try {
|
||||
$player = app(PlayerTokenResolver::class)->resolve($request);
|
||||
} catch (PlayerAuthenticationException $e) {
|
||||
return ApiResponse::error($e->getMessage(), $e->lotteryCode, null, $e->httpStatus);
|
||||
}
|
||||
|
||||
// 使用 attributes,避免与 Laravel 内置 input 混淆
|
||||
$request->attributes->set('lottery_player', $player);
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user