Laravel, user()->id() zwraca 0 po autentykacji

0

Cześć mam problem.
Potrzebuję przy wykonaniu POST'a na api przekazać id aktualnie zalogowanego użytkownika, jednakże
cały czas dostaję '0'.

Route::get('/api/orders', ['middleware' => 'auth', 'uses' => 'App\Http\Controllers\OrderController@index']);

Route::post('/api/orders', ['middleware' => 'auth', 'uses' => 'App\Http\Controllers\OrderController@store']);

Ścieżki w web.php mam ustawione, a w konstruktorze kontrolera dodałem linijkę:

$this->middleware('auth');

Co ciekawe, kiedy wyświetlam w celu debugowania, id w HomeControllerze - obsługuje on stronę która wyświetla się po zalogowaniu -
funkcja zwraca poprawne id użytkownika.

Próbowałem różnych rozwiązań z neta, ale nadal brak efektu.

0

@Eldorad O.: Spróbuj auth()->id()

0

@leonpro778: Próbowałem, również nie działa.

0

@Eldorad O.: A zobacz co Ci zwróci dd(auth()->user())

0

@leonpro778: A gdzie to wrzucić? :D

Może głupie pytanie, ale ja z tym frameworkiem do czynienia mam od paru godzin.

0

@Eldorad O.: Możesz wrzucić chociażby "na samej górze" metody store.

0

@leonpro778: Dostaję taki response body:

Przechwytywanie.PNG

0

@Eldorad O.: Czyli auth()->user()->id zwróci Tobie 1. A teraz drugi test, zamiast tego dd() wstaw takie coś: dd(auth()->id());

0

@leonpro778: Dostaję "1", tak jak powinno być.
O co lata? 0.o

0

No to ok, to w czym problem bo się już pogubiłem :) Może pokaż kod gdzie się to coś wywala :)

0

@leonpro778: W tym problem, że przy funkcji store, chcę dodać "order" do bazy danych.

public function store(StoreOrderRequest $request): Response
    {
        $deliveryDate = $request->has('delivery_date')
            ? new CarbonImmutable($request->post('delivery_date'))
            : null;
        
        $this->orderRepository->store(
            $request->post('series'),
            (int) $request->post(auth()->id()),
            $request->post('name'),
            $request->post('number'),
            (int) $request->post('amount'),
            $request->post('order_price'),
            $request->post('list_price'),
            $request->post('estimated_price'),
            $request->post('shop'),
            new CarbonImmutable($request->post('order_date')),
            $deliveryDate,
        );

        return new Response('', Response::HTTP_CREATED);
    }

Przy dodawaniu "orderu" chcę aby polu "user_id", które jest kluczem obcym, nadana została wartość id aktualnie zalogowanego użytkownika.
Po prostu chcę konkretne "zamówienie" powiązać z konkretnym użytkownikiem który je składa.
Ale przy wrzucaniu do bazy danych, otrzymuję taki błąd:

Przechwytywanie.PNG

Spójrz na "values", kolumna user_id otrzymuje wartość 0.

1

@Eldorad O.: No ale po co pobierasz TO id z $requiest->post, zamień linijkę 9 na auth()->id()

0

@leonpro778: Dzięki kolego, działa :D

Tak jak mówiłem, z tym frameworkiem mam do czynienia od dosłownie chwili i wszystko kleję na kolanie.

A mógłbyś mi jeszcze pomóc z pobieraniem danych z bazy?

Kiedy po zalogowaniu przenoszony jestem na stronę "home" wywoływany jest request do kontrolera, aby pobrał wszystkie wpisy z bazy.
Jednakże, chcę to ograniczyć tylko do tych, które jako "user_id" mają id aktualnie zalogowanego użytkownika, mam taki kod:

public function index(): AnonymousResourceCollection
    {
        return OrderResource::collection($this->orderRepository->getAll()->where('user_id', '=', auth()->id()));
    }

lecz nie zwraca on żadnych wpisów z bazy.

0

@Eldorad O.: A co masz w getAll() ?

0

@leonpro778:

   public function getAll(): Collection
    {
        return OrderModel::orderByDesc('created_at')
            ->get()
            ->map(fn(OrderModel $orderModel): Order => $this->mapToOrder($orderModel));
    }
0

@Eldorad O.: Wywołujesz metodę get() w modelu a następnie na wynikach wywołujesz where(). To nie zadziała. Where przenieś bezpośrednio do getAll() i daj go przed get()

0

@leonpro778: Dzięki wielkie, wszystko działa :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1