Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Kohana] Problem z logowanie?
Pytajka
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.09.2011

Ostrzeżenie: (0%)
-----


Witam,

mam pewien problem, otóż czy wpisuję poprawne hasło czy nie, za każdym razem otrzymuję komunikat o błędzie.

  1. public function action_index()
  2. {
  3. // Login
  4.  
  5. $this->template->error = NULL;
  6.  
  7. if( isset( $_POST['submit'])){
  8.  
  9. $username = ORM::factory('user', $_POST['login']);
  10.  
  11. $this->auth->login( $username, $this->auth->hash_password( $_POST['password']), FALSE);
  12.  
  13. if( $this->auth->logged_in()){
  14.  
  15. $this->request->redirect('panel');
  16.  
  17. }else{
  18.  
  19. $this->template->error = 'Niepoprawny login bądź hasło.';
  20.  
  21. }
  22.  
  23. }
  24.  
  25. $this->response->body( $this->template->render());
  26.  
  27. }
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
symonides
post
Post #2





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 12.11.2010

Ostrzeżenie: (0%)
-----


http://kohanaframework.org/3.2/guide/auth/login
Go to the top of the page
+Quote Post
skowron-line
post
Post #3





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


  1. echo View::factory('profiler/stats');
i zobacz jakie zapytanie się wykonuje może tam jest problem.
Go to the top of the page
+Quote Post
symonides
post
Post #4





Grupa: Zarejestrowani
Postów: 51
Pomógł: 0
Dołączył: 12.11.2010

Ostrzeżenie: (0%)
-----


Moim zdaniem problemu należy szukać w lini jedeneastej (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Pytajka
post
Post #5





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.09.2011

Ostrzeżenie: (0%)
-----


Wykonuje się jedno błędne zapytanie ->
Cytat
SELECT `user`.* FROM `users` AS `user` WHERE `user`.`id` = 'Tester' LIMIT 1 (1)


Ten post edytował Pytajka 26.04.2012, 20:53:20
Go to the top of the page
+Quote Post
skowron-line
post
Post #6





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


http://jdstraughan.com/post/auth-module-fo...sing-orm-driver
To wprawdzie dla 3.1 no ale ten moduł się nie zmienił w wersji 3.2
Go to the top of the page
+Quote Post
Pytajka
post
Post #7





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.09.2011

Ostrzeżenie: (0%)
-----


Cytat(skowron-line @ 26.04.2012, 22:00:41 ) *
http://jdstraughan.com/post/auth-module-fo...sing-orm-driver
To wprawdzie dla 3.1 no ale ten moduł się nie zmienił w wersji 3.2


Zapoznałem się już z tym wcześniej, wszystko wygląda jak u mnie, a jednak nie dział i z tego co widzę to właśnie błędne zapytanie. Nie mam pomysłu.
Go to the top of the page
+Quote Post
lukasz_os
post
Post #8





Grupa: Zarejestrowani
Postów: 203
Pomógł: 55
Dołączył: 23.11.2008
Skąd: UKF

Ostrzeżenie: (0%)
-----


Wklej config autha jaki uzywasz.
Go to the top of the page
+Quote Post
Pytajka
post
Post #9





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.09.2011

Ostrzeżenie: (0%)
-----


  1. return array(
  2.  
  3. 'driver' => 'ORM',
  4. 'hash_method' => 'sha256',
  5. 'hash_key' => ('Sraratatata'),
  6. 'lifetime' => 1209600,
  7. 'session_type' => Session::$default,
  8. 'session_key' => 'auth_user',
  9.  
  10. // Username/password combinations for the Auth File driver
  11. 'users' => array(
  12. // 'admin' => 'b3154acf3a344170077d11bdb5fff31532f679a1919e716a02',
  13. ),
  14.  
  15. );
Go to the top of the page
+Quote Post
lukasz_os
post
Post #10





Grupa: Zarejestrowani
Postów: 203
Pomógł: 55
Dołączył: 23.11.2008
Skąd: UKF

Ostrzeżenie: (0%)
-----


Config wyglada OK. Ale widze inny błąd:
Zrób może tak:

  1. if(isset($_POST['submit'])){
  2. $auth = Auth::instance()->login($_POST['username'], $_POST['password']);
  3. if(!$auth){
  4. $error='Niepoprawna nazwa uzytkownika i/lub hasło';
  5. }else{
  6. $this->request->redirect('admin');
  7. }
  8. }


Nie testowane! ale powinno działać.

Po drugie nie ustawiaj sobie errora od razu w templatce. Użyj np:
  1. $view=View::factory('login')
  2. ->bind('error',$error);


i nie musisz wstawiać takich kwiatków jak:

  1. $this->template->error = NULL;


W widoku potem wystarczy:

  1. <?php
  2. if(isset($error))
  3. {
  4. echo '<div class="n_error"><p>'.$error.'</p></div>';
  5. }
  6. ?>


Ten post edytował lukasz_os 26.04.2012, 21:28:44
Go to the top of the page
+Quote Post
Pytajka
post
Post #11





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.09.2011

Ostrzeżenie: (0%)
-----


To co mi podałeś to to samo co mam aktualnie, tylko w gorszej wersji.
Go to the top of the page
+Quote Post
lukasz_os
post
Post #12





Grupa: Zarejestrowani
Postów: 203
Pomógł: 55
Dołączył: 23.11.2008
Skąd: UKF

Ostrzeżenie: (0%)
-----


Funkcja login zwraca true lub false w zależności od tego czy użytkownik się zalogował bądź nie więc sprawdzanie auth->logged_in jest w tym miejscu zbędne. Poza tym trzymanie instancji Auth w kontrolerze mija się z ideą singletonu gdyż jest on dostępny globalnie i w każdej chwili mozesz się do niego odnieść. Więc nie sądzę abym to, co napisałem, było gorszą wersją.

Widze że do metody login podajesz hashowane hasło - po co? Bo tak jest napisane w tutorialu? Tak się składa że metoda login w Auth automatycznie hashuje hasło i nie musisz podawać hasha do niej. Chyba że masz coś zepsute przy wprowadzaniu danych do bazy. Tego już niestety nie wiem.
Go to the top of the page
+Quote Post
Pytajka
post
Post #13





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.09.2011

Ostrzeżenie: (0%)
-----


Cytat(lukasz_os @ 26.04.2012, 22:45:53 ) *
Funkcja login zwraca true lub false w zależności od tego czy użytkownik się zalogował bądź nie więc sprawdzanie auth->logged_in jest w tym miejscu zbędne. Poza tym trzymanie instancji Auth w kontrolerze mija się z ideą singletonu gdyż jest on dostępny globalnie i w każdej chwili mozesz się do niego odnieść. Więc nie sądzę abym to, co napisałem, było gorszą wersją.

Widze że do metody login podajesz hashowane hasło - po co? Bo tak jest napisane w tutorialu? Tak się składa że metoda login w Auth automatycznie hashuje hasło i nie musisz podawać hasha do niej. Chyba że masz coś zepsute przy wprowadzaniu danych do bazy. Tego już niestety nie wiem.


Skorzystam z tym porad, jednak nadal nie wiem jak rozwiązać problem z logowaniem.
Go to the top of the page
+Quote Post
skowron-line
post
Post #14





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

Ostrzeżenie: (0%)
-----


Otwórz sobie IDE i zobacz co się dzije w tej metodzie i zobacz dlaczego akurat takie zapytanie się wykonuje. Gdzieś jakiś warunek nie jest spełniony.
Go to the top of the page
+Quote Post
lukasz_os
post
Post #15





Grupa: Zarejestrowani
Postów: 203
Pomógł: 55
Dołączył: 23.11.2008
Skąd: UKF

Ostrzeżenie: (0%)
-----


1. Wypisz sobie na ekran: Auth::instance()->hash_password('$password') i porównaj z tym w bazie.
2. Do funkcji login podawaj przesyłane formularzem dane - nic z nimi nie rób a szczególnie:

  1. $username = ORM::factory('user', $_POST['login']);


3. Może schemat bazy danych masz z wcześniejszych wersji - pole password musi mieć 64 znaki.
Go to the top of the page
+Quote Post
Pytajka
post
Post #16





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.09.2011

Ostrzeżenie: (0%)
-----


Cytat(skowron-line @ 26.04.2012, 22:54:38 ) *
Otwórz sobie IDE i zobacz co się dzije w tej metodzie i zobacz dlaczego akurat takie zapytanie się wykonuje. Gdzieś jakiś warunek nie jest spełniony.


Czytałem dokumentację, tutoriale, niby powinno być okej, a cholera no nie jest.

Cytat(lukasz_os @ 26.04.2012, 22:56:39 ) *
2. Do funkcji login podawaj przesyłane formularzem dane - nic z nimi nie rób a szczególnie:

  1. $username = ORM::factory('user', $_POST['login']);


Jak zmienię na $_POST['login'], to otrzymuję komunikat, że brakuje metody o_O

Cytat
ErrorException [ Fatal Error ]: Call to undefined method Model_User::unique_key()
MODPATH/orm/classes/kohana/auth/orm.php [ 76 ]
71 {
72 $username = $user;
73
74 // Load the user
75 $user = ORM::factory('user');
76 $user->where($user->unique_key($username), '=', $username)->find();
77 }
78
79 if (is_string($password))
80 {
81 // Create a hashed password


Ten post edytował Pytajka 26.04.2012, 22:01:27
Go to the top of the page
+Quote Post
lukasz_os
post
Post #17





Grupa: Zarejestrowani
Postów: 203
Pomógł: 55
Dołączył: 23.11.2008
Skąd: UKF

Ostrzeżenie: (0%)
-----


Wklej klasę Model_User
Go to the top of the page
+Quote Post
Pytajka
post
Post #18





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.09.2011

Ostrzeżenie: (0%)
-----


Dziedziczy po standardowej klasie ORM.
Go to the top of the page
+Quote Post
lukasz_os
post
Post #19





Grupa: Zarejestrowani
Postów: 203
Pomógł: 55
Dołączył: 23.11.2008
Skąd: UKF

Ostrzeżenie: (0%)
-----


Stwórz takie dwie klasy:

  1. // in models/role.php
  2. class Role_Model extends ORM {
  3. protected $has_and_belongs_to_many = array('users');
  4.  
  5. public function unique_key($id = NULL)
  6. {
  7. if ( ! empty($id) AND is_string($id) AND ! ctype_digit($id) )
  8. {
  9. return 'name';
  10. }
  11.  
  12. return parent::unique_key($id);
  13. }
  14.  
  15. }
  16.  
  17. // and, in models/user.php
  18. class User_Model extends ORM {
  19. protected $has_and_belongs_to_many = array('roles');
  20.  
  21. public function unique_key($id = NULL)
  22. {
  23. if ( ! empty($id) AND is_string($id) AND ! ctype_digit($id) )
  24. {
  25. return 'username';
  26. }
  27.  
  28. return parent::unique_key($id);
  29. }
  30.  
  31. }
Go to the top of the page
+Quote Post
Pytajka
post
Post #20





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 6.09.2011

Ostrzeżenie: (0%)
-----


Cytat
ErrorException [ Notice ]: Undefined index: roles
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
3 Użytkowników czyta ten temat (3 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 23:38