【问题标题】:Laravel HTTP basic authentication not workingLaravel HTTP 基本身份验证不起作用
【发布时间】:2014-12-31 09:14:39
【问题描述】:

我正在 Laravel 中构建一个 API,并尝试使用 HTTP 基本身份验证。我用user@gmail.com:testpass 的电子邮件/密码组合创建了一个用户。我正在通过以下 URL 访问需要身份验证的端点:https://user@gmail.com:testpass@myapp.local/users/2

当我将auth.basic 路由过滤器附加到此路由时,我可以通过Auth 类成功地进行身份验证并访问经过身份验证的用户的详细信息,但是由于这是一个API,我想使用无状态HTTP 基本身份验证,所以我写了我自己的过滤器:

// Our own auth filter to use onceBasic and return a consistent API response
Route::filter('basic.once', function() {
    $result = Auth::onceBasic();

    if ($result->getStatusCode() === 401) {
        // Unauthorized, return our own response
        return Response::json([
            'message' => 'Bad credentials'
        ], Config::get('status.error.unauthorized'));
    }

    return $result;
});

无论如何,Auth::onceBasic() 的结果总是返回未经授权的,即使我发送的用户名/密码组合保持不变。即使我在过滤器中将Auth::onceBasic() 更改为Auth::basic(),它仍然会返回未经授权的结果。

我什至不知道从哪里开始调试它,因为我的过滤器与 Laravel 附带的 auth.basic 过滤器基本相同,尽管需要更多代码来产生一致的 API 输出。

【问题讨论】:

  • 你能发布你的用户模型吗?另外,您在数据库中的密码是否经过哈希处理?
  • 你解决了吗?您是否尝试更改 .httaccess?

标签: php authentication laravel laravel-4


【解决方案1】:

你在使用 PHP FastCGI 吗?

来自 Laravel 官方文档:


https://laravel.com/docs/5.3/authentication#http-basic-authentication

关于 FastCGI 的说明

如果您使用的是 PHP FastCGI,开箱即用的 HTTP Basic 身份验证可能无法正常工作。以下行应添加到您的 .htaccess 文件中:

RewriteCond %{HTTP:Authorization} ^(.+)$
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

我自己用这种方法解决了。

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2014-09-06
    • 2016-01-11
    • 2020-02-09
    相关资源
    最近更新 更多