【问题标题】:Authentication in Lumen 5.2Lumen 5.2 中的身份验证
【发布时间】:2016-01-10 14:22:55
【问题描述】:

在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 标头可以在这里访问?

【问题讨论】:

  • 请求是什么样的?
  • GET 请求的输入来自查询字符串:http://example.com/users?api_token=my_api_key
  • 还是不行。我也用POST 尝试过它,它也适用于POST,因为我把api_token 放在了正文中。另外你应该知道你在laravel/lumen 中没有? 所以我只是修改了我的路由到/{api_token}
  • lumen 知道如何处理通过查询字符串传入的变量。如果您将api_token 作为查询字符串的一部分传入,则可以使用$request 变量很好地访问它。但是,看起来您的标头方法可以正常工作,这也很好。

标签: laravel laravel-5 lumen lumen-5.2


【解决方案1】:

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

现在会静默删除包含无效字符(包括下划线)的标题。

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-06-25
    • 2017-09-11
    • 1970-01-01
    • 2016-08-05
    • 2017-06-14
    • 2016-07-09
    • 2017-02-26
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多