2015-01-20 3 views
0

Я новичок в системах быстрой разработки, и сейчас я работаю над проектом на CakePHP. У меня возникла проблема с созданием сеанса в моем приложении. Я использовал функцию входа в систему, но не принимает учетные данные, которые я вставляю, и возвращает флеш-сообщение для неправильных учетных данных. Я попытался изменить функцию по-разному, но ясно, что она не устанавливает сеанс. Пожалуйста помоги.Функция входа в Cakephp

Вот соответствующий код.

UsersController.php

public function login() { 
    if ($this->request->is('post')) { 
     if ($this->request->is('post')) { 
      if ($this->Auth->login()) { 
       $this->redirect($this->Auth->redirect()); 
      } else { 
       $this->Session->setFlash(__('Your username or password was incorrect.')); 
      } 
     } 
    } 
} 

AppController.php

public $components = array('Session', 'Auth'); 
+0

Ничто не выскакивает на меня как неправильное с вашим кодом. Я бы включил debug и получил дамп mysql, чтобы увидеть фактический запрос, который он использует для входа. – Kai

+0

Это querry SELECT 'User'.' '' '' '' '' '' _typeid', 'User'''username',' User'''password', 'User'''fname',' User'. 'mname',' User'.'lname', 'User'.'photo',' User'''ender', 'User'''био',' User'.'dob', 'User'.reel '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'LIMIT 1 –

+0

Вы уверены, что это запрос для входа? Это не сравнение с полем пароля. Поэтому либо это неправильный запрос, либо что-то еще не так, хотя проблема не в том коде, который вы опубликовали. – Kai

ответ

0

Кажется, что ваш AppController отсутствует некоторая информация внутри $components.
Попробуйте это:

class AppController extends Controller { 

public $components = array(
    'Cookie', 
    'Session', 
    'Auth' => array(
     'loginRedirect' => array(
      'controller' => '**YOUR CONTOLLERr**', 
      'action' => '**YOUR ACTION**' 
     ), 
     'logoutRedirect' => array(
      'controller' => '**YOUR CONTOLLERr**', 
      'action' => '**YOUR ACTION**', 
      'home' 
     ), 
     'loginAction' => array(
     'controller' => '**YOUR CONTOLLERr**', 
     'action' => '**YOUR ACTION**' 
     ), 
     'authError' => 'Access Denied!', 
     'loginError' => 'Invalid user and password', 
     'authorize' => array('Controller'), 
     'authenticate' => array('Form' => array(
           'userModel' => 'User', 
           'fields' => array(
            'username' => '**LOGIN FIELD**', 
            'password' => '**PASSWORD FIELD**' 
            ) 
           ) 
     ), 
    ) 
); 
} 

Важно установить Session внутри AppController, так что вы можете установить его. Также важно проверить PasswordHash, так как Cakephp только подтверждает учетные данные, если пароль, хранящийся в Базе данных, Hashed.

Надеюсь, это поможет вам.

+0

Эй, спасибо за отзыв. Я установил сеанс, я только что изменил свой метод $ components на код, который вы предоставили, но результат все тот же. Что может быть недостающим? –

+0

Вам необходимо настроить ** loginRedirect **, ** logoutRedirect ** и ** loginAction ** в соответствии с вашим приложением. Но почему вы дважды проверяете форму отправки с помощью 'if ($ this-> request-> is ('post')) {'? Кроме того, включите эту строку в свой Usercontroller.PHP и проверить, работает ли он: 'App :: использует ('CakeSession', 'Model/Datasource');' – bcesars

0

Я ничего не вижу в вашем «соответствующий код», вы можете сравнить данные, которые вы получаете с БД в вашем входе в систему, просто использовать отладку, так:

public function login() { 
     if ($this->request->is('post')) { 
      debug($this->request->data); 
      if ($this->Auth->login()) { 
       return $this->redirect($this->Auth->redirectUrl()); 
      } else { 
       //$this->Session->setFlash(('Your username or password was incorrect.')); 
      } 
     } 
     } 

с этим мы можем получить более информацию вы можете сообщить мне, что показывать, и если эти данные совпадают в БД.

+0

Эй это результат я получаю массив ( \t 'User' => массив ( \t \t 'пароль' => «*****», \t \t «имя пользователя» => «тест» \t) ) –

+0

Дайте отладить пароль и сравнить, если это то же самое, как и в базе данных – CoolLife

+0

я не знаю, как это сделать что. Позвольте мне попробовать. Спасибо. –