我尝试了文档设置并且工作正常,您可能错过了在您的 api 调用中传递身份验证标头。由于 idk 你的设置是什么,我只能在你登录时告诉你,你应该在 api 调用中使用收到的令牌进行身份验证。
PostMan 软件:在标题选项卡中添加一个键为 Authorization 并使用 Bearer 为值分配令牌,如 Breaer token......
如需更多帮助,请说明您是如何尝试 api 调用的。
编辑:添加了使用中间件的替代方式
实现或使用中间件的另一种方式:
创建一个带有 JWT 名称的中间件并将下面的代码放入句柄函数中
Don't forget to import
use JWAuth;
public function handle($request, Closure $next)
{
JWTAuth::parseToken()->authenticate();
return $next($request);
}
然后在内核中将 jwt 添加到 $routeMiddleware 中,如下所示:
protected $routeMiddleware = [
// you should add below code.
'jwt' => \App\Http\Middleware\JWT::class,
];
在routes/api
Route::apiResource('/posts', 'PostController');
现在在 PostController 中像这样将中间件添加到构造函数中。
public function __construct()
{
$this->middleware('jwt', ['except' => ['index','show']]);
}
因此,在构造中,您将基于 JWT 设置 middleware,然后使用 except,您可以修改您的哪个函数不需要基于 JWT 令牌进行身份验证。现在,当您使用auth()->user() 时,您可以获得您的信息等。
因此,如果我在尝试进行 API 调用时使用 GET METHOD 或 url.com/posts 或 url.com/posts/23 时有 index, show, update, delete, store, create,我可以在不传递 JWT 令牌的情况下获取我的帖子。
当您尝试使用JWT 时,您应该意识到它是基于您传递的令牌工作的,当您使用登录时您会获得令牌,但您没有获得用户信息,因为您没有传递用户的令牌到应用程序,在所有这些之前,您应该考虑验证令牌,然后执行其余的逻辑。祝你好运。
编辑:添加更多信息
auth.php
'defaults' => [
'guard' => 'api',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'jwt',
'provider' => 'users',
],
],