Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ Laravel Rejestracja - tworzenie unikalnego identyfikatora usera

Napisany przez: casperii 21.05.2019, 21:35:37

Panowie mam pytanie odnośnie zedytowania auth Laravela odnośnie rejestracji.
Obecny kod RegisterController.php

  1. namespace App\Http\Controllers\Auth;
  2.  
  3. use App\{User,Role};
  4. use App\Http\Controllers\Controller;
  5. use Illuminate\Support\Facades\Validator;
  6. use Illuminate\Foundation\Auth\RegistersUsers;
  7.  
  8. class RegisterController extends Controller
  9. {
  10.  
  11. use RegistersUsers;
  12.  
  13. protected $redirectTo = '/admin';
  14.  
  15. public function __construct()
  16. {
  17. $this->middleware('guest');
  18. }
  19.  
  20.  
  21. protected function validator(http://www.php.net/array $data)
  22. {
  23. return Validator::make($data, [
  24. 'user' => 'required|string|max:255',
  25. 'email' => 'required|string|email|max:255|unique:users',
  26. 'password' => 'required|string|min:6|confirmed',
  27. ]);
  28. }
  29.  
  30.  
  31. protected function create(http://www.php.net/array $data)
  32. {
  33. $user = User::create([
  34. 'user' => $data['user'],
  35. 'email' => $data['email'],
  36. 'password' => bcrypt($data['password']),
  37. ]);
  38.  
  39. // tu chciałbym dodać id_user = numer generowany
  40. }
  41. }


teraz do tego chciałbym dodać coś takiego w czystym php'ie by wyglądało tak:

  1.  
  2. $jest = false;
  3. do{
  4. $id_user = http://www.php.net/rand(0, 999999999);
  5. $id_user = http://www.php.net/str_repeat('0', 9-http://www.php.net/strlen($id_user)) . $id_user;
  6.  
  7. $result = 'SELECT count(`id_user`) FROM users WHERE id_user = '$id_user '
  8. $sql = mysql_query($result);
  9. $jest=mysql_num_rows($sql)>0;
  10. }
  11. while($jest);


Czy ktoś wie jak to połączyć ze sobą ? smile.gif

Napisany przez: Pyton_000 22.05.2019, 07:13:11

Może zamiast tej dziwnej pętli zastosuj UUIDv4 wtedy będziesz miał na 99% unikalną wartość

Napisany przez: casperii 22.05.2019, 15:31:25

@Pyton_000 dzięki za podpowiedź nie znałem UUIDv4 - jak już wspomniałeś daje nam to 99% - a przy obecnych 23 tyś users procentowość maleje.
Zatem nadal pozostaje kwestia jak sprawdzić czy ów wylosowany ciąg znajduje się w bazie.

Napisany przez: Pyton_000 22.05.2019, 15:43:39

23tyś... dobre sobie wink.gif U nas aktualnie w jednej z tabel jest... 83 456 092 wierszy z unikalnymi UUID i na razię się tym nie przejmuję

Napisany przez: casperii 22.05.2019, 15:54:06

no dobra zastosuję tak jak piszesz ,najwyżej później napiszę , że taki jeden @Pyton_000 na forum mi tak kazał yahoo.gif
Przy okazji nie wiem czy to tak kulturalnie , ale wiesz może jak zrobić w laravelu by "to" wyświetlało się tylko na stronie głównej, jeżeli przeklikam to "to" znika smile.gif


Napisany przez: nospor 22.05.2019, 15:57:30

Tak z czystej ciekawosci, bo musze chyba cos przegapiac:
czemu w twoim cudnym algorytmie losowosci ( wink.gif ) masz
= str_repeat('0', 9-strlen($id_user))
czyli do kazdego wylosowanego usera dodajesz iles tam 0 ktore sa zalezne od wylosowanego id usera a przez to zawsze dla tego id usera beda takie same? Przeciez to juz nie dodaje zadnej unikalnosci
No chyba ze chciales poprostu zawsze miec te sama liczbe cyfr. No ale do tego uzywa sie str_pad() smile.gif

Napisany przez: casperii 22.05.2019, 16:02:26

jeżeli rand wylosował mniej niż 9 cyfr - dopycham reszte zerami.

Napisany przez: nospor 22.05.2019, 16:04:54

To tak jak napisalem

Cytat
No chyba ze chciales poprostu zawsze miec te sama liczbe cyfr. No ale do tego uzywa sie str_pad()

Napisany przez: casperii 22.05.2019, 17:52:00

Jeszcze pytanie takie z innej beczki.

Odnośnie kodu:

  1. protected function create(http://www.php.net/array $data)
  2. {
  3. // $data['id_user'] = rand(100, 999999999);
  4. $user = User::create([
  5. 'id_user' => 100,
  6. 'user' => $data['user'],
  7. 'email' => $data['email'],
  8. 'password' => bcrypt($data['password']),
  9. //'key' => Str::uuid()->toString(),
  10. ]);
  11.  
  12. return $user;
  13. }



czy do tablicy $data dane muszą tylko z zewnątrz (z pliku blade ) pochodzić ? Ponieważ jak wklepuje w ten (w powyższy) sposób to wyskakuje błąd:
  1. "SQLSTATE[HY000]: General error: 1364 Field 'id_user' doesn't have a default value


Napisany przez: viking 22.05.2019, 18:23:09

Pole jest dodane w modelu protected $fillable = ['id_user'];

Napisany przez: casperii 22.05.2019, 18:58:34

czyli rozumiem, że to co wysyłamy z formularza postem z pliku blade przechodzi przez app\User.php i przekazuje do kontrollera RegisterController ?



Napisany przez: Pyton_000 22.05.2019, 19:08:25

User::create towrzy encję User na danych z tablicy, zapisuje i zwraca obiekt.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)