【问题标题】:Use Auth::user() in api resources在 api 资源中使用 Auth::user()
【发布时间】:2021-07-25 11:23:24
【问题描述】:

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

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' 必须为 true 或 false,具体取决于属性是否已保存。

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

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

如何使用此路由访问 Auth 守卫?

【问题讨论】:

  • 我现在使用两条路由修复了它,一条是没有用户登录,另一条是用户登录,因为我只能通过身份验证路由访问 auth guard。 第一路 Route::get('property', [PropertyController::class, 'index']); 第二路 Route::middleware('auth:sanctum')->get('auth-property', [PropertyController::class, 'index']);

标签: laravel laravel-sanctum


【解决方案1】:

如果你想在 sanctum 中使用 Auth::check(),你有两个选择:

  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);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-06
    • 2015-09-30
    • 2015-06-29
    • 2023-04-04
    • 2021-11-28
    • 2021-01-31
    • 1970-01-01
    • 2020-07-17
    相关资源
    最近更新 更多