首页 > 解决方案 > 如何使用 Authentication 的 /user api 来使用 Laravel 资源

问题描述

我正在使用 Axios 和 Passport 使用 Laravel 和 Vue 构建一个项目。

我的身份验证正在工作并生成令牌并保存在我的本地存储中以检查登录。

我也正在使用

Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});

但是,我的用户也有一些我在我的模型中描述过的关系,比如

public function types()
{

    return $this->belongsTo(types::class, 'type_id');

}

我的用户资源看起来像这样

 public function toArray($request)
{

    $array = parent::toArray($request);
    $array['group'] = $this->groups;
    $array['type']  =   $this->types->typeName;
    return $array;
}

因此,当用户登录时,我尝试使用 auth:api 获取用户数据,但是我希望与它建立关系。

我试过了

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return UserResource::collection($request->user());
});

and get error
> Call to undefined method App\User::mapInto()

I also tried 
```php
return new UserResource::collection($request->user());

错误:语法错误,意外的“集合”(T_STRING),期望变量(T_VARIABLE)或“$”

return UserResource::collection($request->user()-get());

错误:试图获取非对象的属性“typeName”

那么我做错了什么?感谢您的宝贵时间,如果需要更多详细信息,请告诉我

标签: laravelapiresourceslaravel-passport

解决方案


您可以使用Eager loading. 资源

样本:

Route::get('me', function(Request $request) {
    $request->user()->load('types');
});

推荐阅读