在 api 资源中使用 Auth::user()

Use Auth::user() in api resources

我正在使用 Laravel sanctum 进行身份验证,需要访问 Auth::user() PropertyResource 像这样

use Illuminate\Support\Facades\Auth;

class PropertyResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        // if auth user make saved true or false,
        // else make'saved' = false key
        return [
            'property' => parent::toArray($request),
            'saved' => Auth::check() ? User::find(Auth::id())->is_saved(parent::toArray($request)['id']) : false,
        ];
    }
}


登录后,'saved' 必须为真或假,具体取决于 属性 是否已保存。

问题是当路由有 'auth:sanctum' 中间件时,我只能访问 Auth::user()设置。

我正在使用这条路线Route::get('property', [PropertyController::class, 'index']); 其中 没有身份验证中间件 和 return 所有 属性.

如何使用此路由访问 Auth guard?

如果您想将 Auth::check() 与 sanctum 一起使用,您有两个选择:

  1. 在 auth.php 配置中将 sanctum 设置为默认守卫。
  2. 使用 Auth::guard('sanctum')->check() 而不是 Auth 检查。如果您希望 laravel 继续使用 sanctum,您可以使用:Auth::shouldUse('sanctum').

我曾经遇到过这种情况,当时我在一条路线上有客人和经过身份验证的用户。我创建了一个中间件并在其中放入了这样的代码:

if (auth()->guard('sanctum')->check()) {
        auth()->shouldUse('sanctum');
        return $next($request);
    }