Lumen 5.2 中的身份验证

Authentication in Lumen 5.2

在AuthServiceProvider中;

Auth::viaRequest('api', function ($request) {
    if ($request->input('api_token')) {
        return User::where('api_token', $request->input('api_token'))->first();
    }
});

我似乎无法让它工作。 GET 请求没有 body,因此不存在 input。 我也试过使用 $request->header('api_token') 但仍然得到 unauthorised

如果我像下面那样在 DB 上进行独立搜索,它会起作用;

Auth::viaRequest('api', function ($request) {
        return User::where('api_token', 'my_api_key')->first();
});

谁能确认 $request header 可以在这里访问?

在阅读我的回答之前,请阅读 this article(以防万一您使用的是 Apache Web 服务器)。

Headers containing invalid characters (including underscores) are now silently dropped.

好的,现在要获取您的api_token值,您需要将您的请求header-field名称更改为Api-Token(这是标准的,您可以阅读this) .

现在您可以通过以下方式访问您的 Api-Token 值:

$request->header('Api-Token', 'any-default-value');

如果你真的想得到你的非标准头定义,你可以使用getallheaders函数。更多信息,您可以阅读Symfony\Component\HttpFoundation\ServerBag@getHeaders方法。