【问题标题】:Laravel 5.8 null csrf_token() when used in api controllerLaravel 5.8 null csrf_token() 在 api 控制器中使用时
【发布时间】:2021-09-08 00:57:33
【问题描述】:

我正在开发 Laravel 5.8 和 php 7.1.3。在控制器函数中使用 csrf_token() 返回值,但在控制器/api 控制器中不返回任何值。如何在api控制器函数中使用csrf_token。

Api 控制器:- Http/Controllers/Api/TestConroller.php

class TestConroller extends Controller
{
    public function __construct()
    {
        
    }

    public function getToken(Request $request){

        echo csrf_token();
    }
}

路由:- routes/api.php

Route::get('getToken', 'Api\TestConroller@getToken');

网址:-

http://localhost/laravel/api/getToken

如果 csrf token() 在 api 控制器中不起作用,那么如何在 api 中使用令牌进行验证。

【问题讨论】:

  • 在你的 GET 方法中,你的参数有名字吗?然后$request->name如果你不知道参数的名字,那么你可以用dd($request->all());得到它
  • 我的意思是你应该在 Laravel 控制器中使用return 而不是echo,比如return response()->json(['csrf_token' => csrf_token()]);,但是Api 通常不使用csrf_tokens,所以我不确定你是什么真的很想在这里完成。

标签: laravel api laravel-5.8 csrf-token laravel-api


【解决方案1】:

Csrf 令牌仅在 web.php 中有效,在 api.php 中无效。Api 是无状态的

如果你检查kernal.php

 protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Laravel\Jetstream\Http\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
            \App\Http\Middleware\HandleInertiaRequests::class,
        ],

        'api' => [
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

web 中间件使用 session 。所以如果您在中间件下方发表评论,出于测试目的

\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,

那么它将在 web.php 上返回 null

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-24
    • 2019-11-26
    • 2019-09-20
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    相关资源
    最近更新 更多