php - 带有不记名 token 的 Laravel API - 中间件身份验证 :api

标签 php laravel

我正在尝试使用 Bearer Token 创建 API,但我无法弄清楚:

  • route::middleware('auth:api') 有什么用做
  • route::middleware('auth:api')的代码在哪

  • 所以,我的 Routes\Api.php 中有以下代码文件:
    Route::get('/login', function (Request $request) 
    {
        if(Auth::guard()->attempt(['email' => $request->email, 'password' => $request->password]) == FALSE)
            return response()->json(['status' => FALSE]);
    
        $user = Users::select('id', 'name', 'api_token', 'created_at')->where('email', $request->email)->firstOrFail();
    
        return response()->json(['status' => TRUE, 'user' => $user]);
    });
    
    Route::middleware('auth:api')->get('/bookings', function (Request $request)
    {
        return response()->json(['its working!']);
    });
    

    我能够成功连接到路由 /login并检索 api_token .现在这个 token 必须用于/bookings路由以进行身份​​验证。

    我在跳 middleware('auth:api')验证 Authorization: Bearer zzzzzzzzz 的 CURL header ,但它不起作用。

    所以基本上我需要了解如何更改背后的代码逻辑 auth:api或者我是否应该创建一个新的中间件并检查请求 header ?

    最佳答案

    迪克莱默

    如果您需要自定义代码来处理身份验证,您应该创建自己的中间件和身份验证防护,并使用它而不是 Laravel 提供的默认代码。

    你的问题

    What does the route::middleware('auth:api') do



    它指出路由应该实现中间件“auth”和中间件组“api”。

    Where's the code of route::middleware('auth:api')



    Laravel 中的所有中间件都在 app/Http/Kernel.php 中定义.

    在那里你可能会看到类似的东西
    protected $middlewareGroups = [
        ....,
        'api' => [
            'throttle:60,1',
            'bindings',
        ],
    ];
    


    protected $routeMiddleware = [
        ...,
        'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
        'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
    ];
    

    这意味着使用中间件的路由 auth:api实现 api 中间件组(在本例中为 ThrottleRequestsSubstituteBinding 中间件)和 auth 中间件( Authenticate )。

    实际使用的身份验证防护取决于您的 auth.php 中的配置配置文件:
    'guards' => [
        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    ],
    

    在上述情况下,使用 TokenGuard ( laravel/framework/src/Illuminate/Auth/TokenGuard.php )。

    因此,要回答您的问题,可以在以下位置找到身份验证中间件的代码
    laravel/framework/src/Illuminate/Auth/Middleware/Authenticate.php
    

    关于php - 带有不记名 token 的 Laravel API - 中间件身份验证 :api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52570142/

    相关文章:

    php - Laravel:表单文件上传失败 - 检测到不正确的类型

    Laravel - Controller 可以判断请求是来自网络还是 api 路由?

    php - 将Mysql数据添加到外部javascript文件中的js var中

    php - 计算按不同部分名称分组的项目数

    php - 如何确定通过 PHP 按下了哪个提交按钮

    php - Laravel 调用未定义函数 Intervention\Image\Gd\imagecreatefrompng()

    Laravel 5.2 验证错误

    php - 从两列中计算最多的记录

    javascript - 使用 htaccess 隐藏文件扩展名后链接无法正确打开

    php - 拉维尔 : I can't use Request object two times at the same function