在Apache中的Laravel获得标头值

ran*_*mor 4 php apache laravel

我在Laravel BaseController中有以下代码.我想Authorization用带有令牌的标头来保护我的所有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);
    }
  }
Run Code Online (Sandbox Code Playgroud)

这是我的.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>
Run Code Online (Sandbox Code Playgroud)

因此,如果我有标记的问题行,Apache将完美地读取所有内容.我会得到我的回复,而不是得到403.但是,如果我没有该行,我将收到403自定义错误消息的错误.为什么?显然我使用相同的代码$this->currentUser = User::findByToken($accessToken);,为什么通过留下标记线我将能够得到标题?是否在场景后面发生重定向,Authorization只是第二次以某种方式设置标题?是否有一个我错过了apache第一次拿起标题的设置?

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

更新:看起来我不应该重用AuthorizationHeader?我试过了:

$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);
}
Run Code Online (Sandbox Code Playgroud)

而这次我能够获得真正的令牌.我的问题仍然存在,为什么我可以返回"神奇"的标题并突然在Laravel中获得它?

这个相关的问题没有回答它,但指出了正确的方向:laravel 4:为什么Request :: header()没有得到指定的头?

还有一件事:Authorization如果我使用的php artisan serve是使用php dev服务器,那么标头在没有魔法返回的情况下工作.

ran*_*mor 15

这是一个Laravel和Apache问题,这行公共/ .htaccess为我修复了它:

RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
Run Code Online (Sandbox Code Playgroud)

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