我有一个流明项目(Laravel 6.x),在其中建立了一条路线,将http请求通过中间件传递,以通过令牌进行身份验证,然后传递到控制器。
当前,我只想检查在中间件中成功进行身份验证之后是否可以在控制器内获取http请求的内容。
我在web.php
内部的守卫路线如下所示:
$router->get('myStorage', ['middleware' => 'auth', 'uses' => 'AuthController@myStorage']);
我的AuthServiceProvider.php
如下:
<?php
namespace App\Providers;
use App\User;
use Firebase\JWT\JWT;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\ServiceProvider;
//new Code
class AuthServiceProvider extends ServiceProvider
{
public function register()
{
//
}
public function boot()
{
// Here you may define how you wish users to be authenticated for your Lumen
// application. The callback which receives the incoming request instance
// should return either a User instance or null. You're free to obtain
// the User instance via an API token or any other method necessary.
$this->app['auth']->viaRequest('api', function ($request) {
$key = 'pawifjopawiejfpoaiwejfpoji';
//$jwt = preg_replace('/^Bearer (.*)/', '$1', $request->header('Authorization'));
$jwt = $request->header('Authorization');
$decoded = JWT::decode($jwt, $key, ['HS256']);
//return User::where('email', $decoded->email)->first();
return $request;
});
}
}
我的AuthController.php的相关部分如下所示:
<?php
namespace App\Http\Controllers;
use App\User;
use Firebase\JWT\JWT;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class AuthController extends Controller
{
public function myStorage(Request $request){
//$request->getContent():
dd($request);
}
}
到目前为止,至少在到达控制器时,http请求不再具有内容。 dd()给我一个带有空的“内容”属性的响应。
现在,我发送的请求如下所示:
标头设置为“ authorization: <TOKENVALUE>
”,我还尝试了另外设置Content-Type: Application/Json
和/或Content-Type: Text/Plain
的方法。
主体包含一个JSON字符串,即这个字符串:
{
"email" : "heinz@email.com",
"password" : "12345"
}
但是,正如我所说,$ request的内容在到达控制器内部时为空。 为什么会这样?