Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Auth::user() zwraca null za każdym razem
Forum PHP.pl > Forum > Przedszkole
Johnas
  1. <?php
  2.  
  3. namespace App\Http\Controllers;
  4.  
  5. use App\Models\Page;
  6. use Illuminate\Http\Request;
  7. use Illuminate\Support\Facades\View;
  8. use App\Http\Controllers\ConfigController as CC;
  9. use Illuminate\Support\Facades\Auth;
  10. use App\Http\Controllers\Accounts;
  11.  
  12.  
  13.  
  14. class PageController extends Controller
  15. {
  16. protected $user;
  17.  
  18. protected $menu;
  19.  
  20. protected $navigation;
  21.  
  22. protected $domain = "";
  23.  
  24. public function __construct()
  25. {
  26. $user = new Accounts();
  27.  
  28. /** To kurła nie działą -- >>> >ADS?<gf */
  29. $this->middleware(function ($request, $next) {
  30. $this->user = Auth::user();
  31. return $next($request);
  32. });
  33. $this->domain = request()->server('SERVER_NAME');
  34. $menu = $this->renderMenu();
  35. View::share("navigation", $menu);
  36.  
  37.  
  38. //$this->createPage("Testowa strona","To jest opis testowej strony", "test", "fasfafad", 1, 0, 1);
  39.  
  40. }
  41.  
  42. public function jakas_zjeana_funkcja() {
  43. $id = Auth::user()->id; // zwraca null (nie ma id)
  44. $user = Auth::user(); // No chyba twoja stara - zwraca zero
  45. if (Auth::guest()) // Sprawdzac tak mozesz czy cie nie ma w Częstochowie - nie działa
  46. Auth::id(); // haha w cyrku mieszkasz - null
  47.  
  48.  
  49. }


może to dlatego że mam kontroler w database, ale jak inaczej mam sprawdzać czy jest zalogowany -- nic nie działa, nie wiem jak sprawdzać inaczej użytkownika... Dlatego z tym pieronym frameworkiem nie pracowałem...
nospor
Nie uzywam laravel ale robiles wg instrukcji na tej stronie:
https://laravel.com/docs/9.x/authentication
?
Zalogowales wpierw uzytkownika ze probujesz go pobrac?
No i czemu w tym kontrolerze robisz jakis middleware? To wydaje sie byc zbedne.
viking
A jesteś w ogóle zalogowany w aplikacji?
netir
Troll post, ale na 100% nie jest zalogowany w sesji w której sprawdza i dostaje null'a. W Laravelu są też różne guardy uwierzytelniania, defaultowe to web i api, więc jak źle testowane to też zwróci nulla.

https://laravel.com/docs/9.x/authentication...ication-methods

  1. use Illuminate\Support\Facades\Auth;
  2.  
  3. $user = User::find($id);
  4. Auth::login($user);
  5.  
  6. dd(Auth::user());


Najlepiej wrzuć sobie to do route w web dla testu i zobaczysz, że działa.
Johnas
laravel jest bardziej pozabezpieczany przez co nigdy nie chciało mi się go używać... nie ma dostępu bezpośrednio w funkcjach do id użytkownika, albo robię coś nie tak...


w __construct klasy muszę wywołać funkcję gdzie można sprawdzić id:

  1. $this->middleware(function ($request, $next) {
  2. $this->user = Auth::user();
  3.  
  4. if (isset($this->user->id))
  5. $id = $this->user->id;
  6. else
  7. $id = false;
  8.  
  9. $menu = $this->renderMenu($id);
  10. View::share("navigation", $menu);
  11. return $next($request);
  12. });


a z niej dopiero funkcję ktorą chcę wywołać... naprawdę to jedyny sposób aby to wykonać? nieraz tworzę funkcję w której naprawdę potrzebuję id użytkownika
viking
W każdym miejscu masz Auth::id().
Możesz zrobić komponent który będzie sam w sobie sprawdzał użytkownika i generował właściwe menu dla niego.
https://laravel.com/docs/9.x/blade#components
nospor
To co napisal viking to oczywiscie prawda. Ale jakby jakims cudem to nie istnialo to po to wymyslono operator ?? by uniknac takich kodow co tu masz:

  1. if (isset($this->user->id))
  2. $id = $this->user->id;
  3. else
  4. $id = false;


Caly ten kod powyzej mozna zapisac poprostu tak:
  1. $id = $this->user->id ?? null

I juz.
Ja dodatkowo zamiast false przypisal do id null, bo tak naprawde to powinno byc null gdy id nie istnieje a nie false ;)
com
@nospor z tym trzeba uważać bo łatwo można się się potem na tym wyłożyć i trzeba wtedy rozumieć co się miało na myśli pisząc taka linie wink.gif powinno być po prostu sprawdzenie czy user nie jest nullem i jak jest return z funkcji albo w php 8 nullsafe operator użyć wink.gif

bo to ma ukryte efekty uboczne w postaci takiej że ten operator sprawdza, czy wartość istnieje i nie jest nullem i jak jest to druga cześć funkcji a tam z nulla robimy nulla wink.gif

teraz wiemy czemu tak ale za pól roku już trzeba będzie się zastanawiać czemu tak, albo inny programista na to spojrzy w miedzy czasie smile.gif
nospor
Ja tam nie mam problemu ze zrozumieniem takiej linii.

Ok, mozna napisac i tak jak wspomniales
$id = $this->user?->id;

Aczkolwiek, ze dla mnie jest to jeszcze dosc nowa konstrukcja, taka linia jest dla mniej mniej zrozumiala. Ale to juz kwestia przyzwyczajenia wink.gif


Cytat
i jak jest to druga cześć funkcji a tam z nulla robimy nulla

No i? Juz nie popadajmy w paranoje wink.gif
com
Jasne że Ty nie, ale nie każdy jest na takim poziomie jak my wink.gif

Pewnie, nie chodzi o popadanie w paranoje, bardziej o fakt że na takim kodzie z ukrytym efektem ubocznym można się przejechać jak nie wie co sie robi wink.gif bo jak się robi świadomie to żaden problem smile.gif
nospor
Niech ci bedzie.
W sumie nawet

$id = $this->user?->id;

wyglada ladniej :D Tu trzeba miec tylko swiadomosc ze nullsafe nie dziala na tablicach podczas gdy ?? zadziala ladnie na tablicach. Skolei na nullsafe dziala na metodach a ?? juz nie :D Takze tak czy siak jedno czy drugie trzeba swiadomie uzywac
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.