我使用laravel 5.5和tymon / jwt-auth作为我的jwt服务提供商。 当我从控制器使用JWTAuth门面时 - 一切都很顺利 - 我得到了令牌,可以操纵任何东西。
当我尝试在我创建的自定义中间件中使用JWTAuth外观时 - 标题已消失且请求为空。 确定在laravel的中间件中不存在问题,因为JWT的中间件可以通过标头获取令牌。
我在端口80上运行nginx反向代理,它在端口8080上重定向到apache服务器,而apache运行laravel项目。
建议任何人?
代码:
api.php
Route::get('organizations', 'OrganizationController@index')->middleware('org');
Kernel.php
'org' => \App\Http\Middleware\OrganizationMiddleware::class,
OrganizationMiddleware.php
<?php
namespace App\Http\Middleware;
use Closure;
use JWTAuth;
class OrganizationMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$token = JWTAuth::getToken();
return response()->json(['token' => $token], 200);
// return $next($request);
}
}
我的尝试不顺利。中间件回答,但请求完全是空的。所以我无法获得标题或令牌或任何其他参数。 真的很奇怪。也在本地测试,仅在apache上,并使用适当的.htaccess文件。还启用了CORS以防万一。 令牌完全是空的。
更新:
composer.json
"require": {
"php": ">=5.6.4",
"aws/aws-sdk-php-laravel": "~3.0",
"illuminate/contracts": "^5.5",
"laravel/framework": "5.5.*",
"laravel/tinker": "~1.0",
"spatie/laravel-fractal": "^5.2",
"tymon/jwt-auth": "0.5.11"
},
答案 0 :(得分:0)
$request->bearerToken()
会从请求标头中提取授权承载令牌。
$request->header()
如果你想获得所有标题。
$request->header('name', 'default')
按名称获取标头。
$request->headers
获取HeaderBag
。
目前还不确定为什么事情会变空。版本信息可能有所帮助。
答案 1 :(得分:0)
将您的jwt标记设置为标题
$request->headers->set('Authorization', 'Bearer' . $token);
在将请求从nginx重定向到apache期间,标题可能会丢失。检查您的服务器配置。