Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana][Kohana3.3] Auth module
Forum PHP.pl > Forum > PHP > Frameworki
pkielski
Problem w rodzaju - banalna sprawa, wszystko powinno działać, no i nie działa smile.gif

Tworze sobie od nowa portal uzyczam.pl, zaczalem od rejestracji uzytkownikow i tutaj schody, rejestracja pod adresem:
http://uzyczam.pl/rejestracja

Tabele z uzytkownikami standardowe z modulu Auth, jedyna zmiana to w Users pole username to bedzie tak naprawde email
  1. CREATE TABLE IF NOT EXISTS `upl_users` (
  2. `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. `username` varchar(254) NOT NULL,
  4. `password` varchar(64) NOT NULL,
  5. `logins` int(10) UNSIGNED NOT NULL DEFAULT '0',
  6. `last_login` int(10) UNSIGNED,
  7. PRIMARY KEY (`id`),
  8. UNIQUE KEY `uniq_email` (`email`)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


Metoda:
  1. public function action_register()
  2. {
  3. $this->template->title = __('Uzyczam.pl - rejestracja');
  4.  
  5. $error = '';
  6. $success = '';
  7. if(isset($_POST['email']))
  8. {
  9. if(ORM::factory('User')->where('username', '=', $_POST['email'])->count_all()>0)
  10. $error .= __('Użytkownik korzystający z tego emaila istnieje już w bazie. ');
  11.  
  12. if(ORM::factory('City')->where('nazwa', '=', $_POST['city'])->count_all()==0)
  13. $error .= __('Nie znaleziono podanej nazwy miejscowości w bazie. ');
  14.  
  15. if($error == '')
  16. {
  17.  
  18.  
  19. $user = ORM::factory('User');
  20. $user->username = $this->request->post('email');
  21.  
  22. $user->password = $this->request->post('password');
  23.  
  24. $user->save();
  25. #$user->role = $user->id;
  26.  
  27. $success .= __('Zostałeś zarejestrowany, możesz się zalogować.');
  28. }
  29. }
  30.  
  31.  
  32. $this->template->content = View::factory('template/rejestracja');
  33. $this->template->content->error = $error;
  34. $this->template->content->success = $success;
  35. }


ale nawet gdy na sztywno podalem dane to wyskakuje ten sam blad:
  1. $user = ORM::factory('User');
  2. $user->username = 'adfadadfadsf';
  3.  
  4. $user->password = 'qwerqwerqwer';
  5.  
  6. $user->save();
  7. #$user->role = $user->id;



Cytat
ORM_Validation_Exception [ 0 ]: Failed to validate array
MODPATH/orm/classes/Kohana/ORM.php [ 1275 ]
1270
1271 $array = $this->_validation;
1272
1273 if (($this->_valid = $array->check()) === FALSE OR $extra_errors)
1274 {
1275 $exception = new ORM_Validation_Exception($this->errors_filename(), $array);
1276
1277 if ($extra_errors)
1278 {
1279 // Merge any possible errors from the external object
1280 $exception->add_object('_external', $extra_validation);



Mozecie tam pod tym adresem sprobowac sie zarejestrowac i dokladny komunikat sprawdzic. Rece mi juz opadaja, siedze na tym juz 1,5 dnia, nie wiem gdzie lezy blad, probowalem roznie do tego podejsc, ale ciagle to samo sad.gif
daro0
Można też inaczej:

  1. try
  2. {
  3. $user = ORM::factory('User')->create_user($this->request->post(), array(
  4. 'username',
  5. 'password',
  6. 'email'
  7. ));
  8.  
  9. $user->add('roles', ORM::factory('Role', array('name' => 'login')));
  10.  
  11. } catch (ORM_Validation_Exception $e)
  12. {
  13. $errors = $e->errors('models');
  14. }
  15.  


Ważne, w widoku odpowiedzialnym za rejestrację użytkownika muszą być pola tekstowe formularza o nazwach (atrybuty name): username, email, password, oraz password_confirm, więc potrzeba tam te cztery pola, nazwa użytkownika, email (musi być unikatowy), hasło (min. 8 znaków) oraz powtórz hasło, żeby się zgadzały i sądzę że stąd ten błąd.

Natomiast w tym catch odpowiada to za pobieranie informacji o błędach walidacji,

w katalogu /application/messages/models powinien być:

user.php

  1. <?php
  2.  
  3. return array(
  4. 'username' => array(
  5. 'not_empty' => 'Musisz wprowadzić nazwę użytkownika.',
  6. 'min_length' => 'Minimum :param2 znaków.',
  7. 'max_length' => 'Dopuszczalne :param2 znaków.',
  8. 'username_available' => 'Ta nazwa już istnieje.',
  9. 'unique' => 'Użytkownik o takiej nazwie już istnieje w bazie.'
  10. ),
  11. 'email' => array(
  12. 'not_empty' => 'Musisz wprowadzić adres e-mail',
  13. 'min_length' => 'Minimum :param2 znaków.',
  14. 'max_length' => 'Dopuszczalne :param2 znaków.',
  15. 'email' => 'Wprowadź prawidłowy adres',
  16. 'email_available' => 'Ten mail jest już w bazie.',
  17. 'unique' => 'Ten adres e-mail już istnieje w bazie.'
  18. )
  19. );
  20.  


w /application/messages/models/user powinien być:

_external.php

  1. <?php
  2.  
  3. return array(
  4. 'password_confirm' => array(
  5. 'matches' => 'Hasła się nie zgadzają.',
  6. ),
  7. 'password' => array(
  8. 'not_empty' => 'Proszę wprowadzić hasło.',
  9. 'min_length' => 'Hasło musi mieć min. :param2 znaków',
  10. )
  11. );


a to przykładowy fragment widoku do rejestracji:

  1. <input type="text" name="username">
  2. <span class="errormsg"><?php if (isset($errors['username'])) echo $errors['username']; ?></span>
  3. <input type="text" name="email">
  4. <span class="errormsg"><?php if (isset($errors['email'])) echo $errors['email']; ?></span>
  5. <input type="password" name="password">
  6. <span class="errormsg"><?php if (isset($errors['_external']['password'])) echo $errors['_external']['password'];; ?></span>
  7. <input type="password" name="password_confirm">
  8. <span class="errormsg"><?php if (isset($errors['_external']['password_confirm'])) echo $errors['_external']['password_confirm']; ?></span>
  9.  


Schema bazy danych (MySQL) jest tam w module ORM, zakładam że z tego korzystasz.

Napisz czy to zadziała bo sam robiłem już niejedną aplikację w Kohanie (3.2/3.3)
pkielski
Dzięki kolego za pomoc, przede wszystkim skorzystałem z Twojego rozwiązania z try,catch, przyznam ze wczesniej z tego nie korzystalem (a powinienem), dzieki temu zobaczylem co dokladnie bylo nie tak u mnie, okazalo sie ze troche namieszalem z polami username-email. Pozniej jednak nie dzialalo mi dodawanie Ról, a jest to wymagane do logowania, tez sie z tym troche meczylem - ciagle nie laczylo users z roles, ostatecznie podzialalo polaczenie moich has_many z tymi w Auth_User (tam byly role i tokeny, u mnie dodatkowe pola).

Odnosnie tego co Ty napisales (przynajmniej ja się Tobie tez przydam na przyszlosc), to w widoku nie musisz miec w cale potwierdzenia hasla, ani nawet usera i email, validation tego nie sprawdza, ja mam logowanie tylko z pomoca emaila, bez username i podwojnego hasla.

Dzięki!
daro0
To co napisałem dotyczyło rejestracji nowego użytkownika, zaś w logowaniu są dwa (albo trzy) pola: username i password i ewentualnie remember jako checkbox. No i logowanie odbywa się przez sprawdzanie tych wartości, pewnie można zrobić przez e-mail zamiast username (w sumie to łatwe) ale standardowo (a analizowałem kod w modułach Auth) logowanie jest przez username, password.
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.