fastadmin Api如何判断Authorization

Php   2025-04-30 11:12   30   0  

在FastAdmin框架中,判断Authorization通常涉及到对HTTP请求头中的Authorization字段进行解析和处理。Authorization头通常用于携带令牌(如JWT令牌、OAuth令牌等),用以验证用户身份。以下是几种在FastAdmin框架中处理Authorization头的常见方法:

namespace app\common\middleware;
 
class AuthMiddleware
{
    public function handle($request, \Closure $next)
    {
        $authHeader = $request->header('Authorization');
        if (!$authHeader) {
            return response('Unauthorized.', 401);
        }
 
        // 解析令牌(例如JWT)
        $token = str_replace('Bearer ', '', $authHeader);
        // 验证令牌...
        // 例如使用JWT验证
        if (!app('jwt')->verify($token)) {
            return response('Invalid token.', 401);
        }
 
        return $next($request);
    }
}


然后,在应用的中间件配置中注册这个中间件:

// config/middleware.php
return [
    // ...
    \app\common\middleware\AuthMiddleware::class,
    // ...
];


2. 控制器中使用请求对象

在控制器中,你可以直接从请求对象获取Authorization头:

use think\Request;
use think\facade\Response;
use think\facade\Jwt; // 假设使用JWT进行验证
 
class SomeController
{
    public function someAction(Request $request)
    {
        $authHeader = $request->header('Authorization');
        if (!$authHeader) {
            return Response::create('Unauthorized.', 401);
        }
 
        $token = str_replace('Bearer ', '', $authHeader);
        if (!Jwt::verify($token)) { // 假设有一个JWT验证方法
            return Response::create('Invalid token.', 401);
        }
        // 继续处理请求...
    }
}



3. 全局守卫(Guard)或策略(Policy)

FastAdmin或Laravel等其他ThinkPHP扩展框架可能提供了更高级的身份验证机制,如全局守卫或策略。

如果你在使用ThinkPHP框架的扩展包(如ThinkPHP-JWT),可以这样使用:

use think\facade\Jwt; // 确保已经引入了JWT的facade或类库文件
use think\Request;
use think\facade\Response;
 
class SomeController
{
    public function someAction(Request $request)
    {
        $authHeader = $request->header('Authorization');
        if (!$authHeader) {
            return Response::create('Unauthorized.', 401);
        }
        $token = str_replace('Bearer ', '', $authHeader); // 移除Bearer前缀(如果存在)
        try {
            $user = Jwt::verify($token); // 验证并获取用户信息,如果成功返回用户信息,失败则抛出异常。确保你已经正确配置了JWT。
            // 继续处理请求...
        } catch (\Exception $e) {
            return Response::create('Invalid token.', 401); // 处理异常情况,通常是无效的令牌或令牌已过期。
        }
    }
}