gpt4 book ai didi

php - Apache 中的 Laravel 获取 header 值

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:55:44 25 4
gpt4 key购买 nike

我在 Laravel BaseController 中有以下代码。我想使用带有 token 的 Authorization header 来保护我的所有 api 资源。

  public function __construct()
{
$this->beforeFilter('@getUserFromToken');
}

public function getUserFromToken($route, $request)
{
$accessToken = Request::header('Authorization');
if(!empty($accessToken)){
$this->currentUser = User::findByToken($accessToken);
}else{
return Request::header('Authorization'); //THE PROBLEM
return Response::json(['error'=>'Not authorized. Access token needed in Header.Authorization'], 403);
}
}

如果相关的话,这是我的 .htaccess。

<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

因此,如果我有标记的问题行,Apache 将完美地读取所有内容。我会得到我的回应,而不是得到 403。但是,如果我没有该行,我将收到带有自定义错误消息的 403 错误。为什么?显然我使用的是相同的代码 $this->currentUser = User::findByToken($accessToken);,为什么离开标记的行我就能得到标题?是否在后台发生重定向,以某种方式仅第二次设置 Authorization header ?是否有我错过的设置让 apache 第一次获取 header ?

更新:我想我的问题是:如果我只是 return Response::json(['error'=>'Not authorized. Access token needed in Header.Authorization'], 403);,我总是会得到这个错误 json。而我的 $accessToken 永远是空的。为什么?

更多更新:看起来我不应该重用 Authorization header ?我试过:

$accessToken = Request::header('Custom-Token');
if(!empty($accessToken)){
$this->currentUser = User::findByToken($accessToken);
}else{
return Response::json(['error'=>'Not authorized. Access token needed in Header.Authorization'], 403);
}

而这一次我能够得到真正的 token 。那么我的问题仍然存在,为什么我可以返回“神奇”的标题并突然在 Laravel 中得到它?

这个相关问题没有回答,但为我指出了正确的方向:laravel 4: why is Request::header() not getting the specified header?

还有一件事:如果我使用 php artisan serve 服务,则 Authorization header 可以在没有魔法返回的情况下工作,它使用 php dev server。

最佳答案

这是 Laravel 和 Apache 的问题,public/.htaccess 中的这一行为我修复了它:

RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

修复来自 https://github.com/dingo/api/issues/54

关于php - Apache 中的 Laravel 获取 header 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24086340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com