34 lines
1.0 KiB
PHP
34 lines
1.0 KiB
PHP
<?php
|
||
|
||
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;
|
||
|
||
/**
|
||
* 玩家端受保护路由前置:解析 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);
|
||
}
|
||
}
|