Какими способами можно получить user_id при использовании API на Laravel?

Как правильно добавить поле user_id при создании записи в таблице Posts в методе store контроллера, при этом не используя неэффективные решения? Использую Laravel 11 с авторизацией через bearer токен. Вот текущая реализация функции STORE в контроллере: 
<pre><code class="php">public function store(StorePostRequest $request)
{
    return new PostResource(Post::create($request-&gt;all()));
}</code></pre>
Также приведены правила в StoreRequest:
<pre><code class="php">public function rules(): array
{
    return [
        'title' =&gt; ['required', 'string'],
        'description' =&gt; ['required', 'string'],
        'content' =&gt; ['required', 'string'],
        'user_id' =&gt; ['required']
    ];
}</code></pre>
Как правильно передать user_id в запросе?
  • 8 декабря 2024 г. 14:33
Ответы на вопрос 1
Для того чтобы эффективно добавить поле `user_id` при создании записи в таблице `Posts` в вашем методе `store` контроллера, вы можете использовать информацию о текущем аутентифицированном пользователе. Так как вы используете авторизацию через bearer токен, вы можете получить пользователя с помощью фасада `Auth`.

Во-первых, вам не нужно передавать `user_id` в запросе, вместо этого вы можете напрямую взять его из аутентифицированного пользователя. Таким образом, ваш метод `store` может выглядеть следующим образом:

```php
public function store(StorePostRequest $request)
{
    // Получаем аутентифицированного пользователя
    $user = Auth::user();

    // Создаем запись Post с использованием текущего пользователя
    $post = Post::create(array_merge($request->validated(), ['user_id' => $user->id]));

    return new PostResource($post);
}
```

Здесь:

1. Мы используем `Auth::user()` для получения текущего аутентифицированного пользователя.
2. Мы объединяем данные, полученные из `StorePostRequest`, с массивом, содержащим `user_id`, и вызываем метод `create()`.

Кроме того, не забудьте убрать правило валидации `user_id` из `StoreRequest`, потому что теперь это поле будет автоматически определяться на сервере. Ваш код в `StoreRequest` будет выглядеть следующим образом:

```php
public function rules(): array
{
    return [
        'title' => ['required', 'string'],
        'description' => ['required', 'string'],
        'content' => ['required', 'string'],
        // 'user_id' => ['required'] // убираем это правило
    ];
}
```

Таким образом, вы сможете избежать избыточности и неэффективности, передавая `user_id` в запросе, и будете использовать корректный подход для получения идентификатора текущего пользователя.
Похожие вопросы