Функция аутентификации Cakephp 2.4.5 не работает

Я новичок в Cakephp и пытаюсь создать простое приложение для регистрации и входа в систему. После написания кода проблема, с которой я столкнулся, заключается в том, что моя форма входа авторизует любой адрес электронной почты и пароль и перенаправляет на ту страницу, которую я установил после входа в систему. Вот мой код:

В AppController.php

App::uses('Controller', 'Controller');
class AppController extends Controller 
{
var $components = array('Auth');                                                                      
}

В UserController.php

<?php
//Filename  -UsersController.php

//Registering new users and login
class UsersController extends AppController
{

 public $helpers = array('Html','Form','Session');
 public $components = array('Session',
                        'Auth' => array(
                           'authenticate' => array(
                           'Form' => array (
                           'fields' => array('username'=>'email','password'=>'password')
 ))));

 /**
  *  Function for saving a new user
  */
  public function index()
  {
  if($this->request->is('post'))
  {
  //print_r($this->request->data);die;  
  $this->User->create();
  if($this->User->save($this->request->data))
  {
  $this->Session->setFlash(__('Congrats, you are registered successfully'));
  return $this->redirect(array('action'=>'index')); 
  } 
  $this->Session->setFlash(__('Unable to store the user'));
  } 
  }


  /**
   *  Function for login functionality
   */
   function beforeFilter()
{
 $this->Auth->loginRedirect=array('controller'=>'pages','action'=>'welcome');
 $this->Auth->logoutRedirect = array('controller'=>'pages','action'=>'welcome');
 }

 public function login()
 {
    if($this->request->is('post'))
    {
      if($this->Auth->login())
      {
        //print_r($this->request->data);die;
        $this->redirect($this->Auth->redirect());
      } 
      $this->Session->setFlash(__('Invalid username or password, try again'));
    }
 }

 public function logout() {
                        return $this->redirect($this->Auth->logout());
                          } }

В модели User.php

    <?php 
        // Filename - User.php
        // Model for registering new users
       App::uses('AppModel', 'Model');
       App::uses('SimplePasswordHasher', 'Controller/Component/Auth');
       class User extends AppModel
       {        
public $validate = array(
                        'username'=>array('required'=>array(
                        'rule'=>array('notEmpty'),                                                  
                        'message'=>'Username is required'
                                                           )),
                        'password'=>array('required'=>array(
                         'rule'=>array('notEmpty'),                                   
                         'message'=>'Password is required'
                                                           )),
                        'email'=>array('required'=>array(
                        'rule'=>array('notEmpty'),                                   
                        'message'=>'Email is required'
                                                        ))  
                        );
     public function beforeSave($options = array())
 {
     if(isset($this->data['User']['password']))
{
$passwordHasher = new SimplePasswordHasher();
$this->data['User']['password']=
    $passwordHasher->hash($this->data['User']['password']);
    }
    return true;
        }
       }

В login.ctp

   <?php
         echo $this->Form->create();
         echo $this->Form->input('username',array('style'=>'width:200px;'));
         echo $this->Form->input('password',array('style'=>'width:200px;'));
         echo $this->Form->end('Sign in');
         ?>

Пожалуйста, помогите мне решить эту проблему. Заранее спасибо.


person Vishal.S    schedule 11.04.2014    source источник
comment
Недавно был задан соответствующий вопрос, который может быть полезен: stackoverflow.com/questions/22990023/   -  person AgRizzo    schedule 11.04.2014


Ответы (2)


Если вам нужно простое приложение для регистрации/входа пользователя, я предлагаю вам взглянуть на плагин для пользователей CakeDC.

person nsbm    schedule 11.04.2014

Сначала используйте AuthComponents только в своем AppController, а не в UsersController. Итак, ваш код-

В AppController.php

App::uses('Controller', 'Controller');
 class AppController extends Controller 
 {
 public $helpers = array('Html','Form','Session');
 public $components = array('Session',
                        'Auth' => array(
                           'authenticate' => array(
                                'Form' => array (
                                    'fields' => array('username'=>'email','password'=>'password')
 ))));  


}

UsersController.php

удалить public $helpers, public $components из UsersController.php

В логин.ctp

Таким образом, вы меняете username по умолчанию на email, поэтому используйте email в представлении.

   <?php
         echo $this->Form->create();
         echo $this->Form->input('email',array('style'=>'width:200px;'));
         echo $this->Form->input('password',array('style'=>'width:200px;'));
         echo $this->Form->end('Sign in');
         ?>
person Fazal Rasel    schedule 13.04.2014
comment
Это решает мою проблему. Спасибо за это. Еще одна вещь, которую я хочу знать о входе в Cake: предположим, я получаю вход, используя адрес электронной почты и пароль, а после этого я нажимаю кнопку «Назад» в браузере (я использую Google Chrome), он снова возвращает меня на экран входа в систему. Теперь, если я даю неправильный пароль или редактирую адрес электронной почты. Он получает логин. Я не понимаю, почему это происходит? Это из-за файла cookie, который торт php сделал в моем браузере? - person Vishal.S; 14.04.2014
comment
Что ж, если это решит вашу проблему, отметьте это как ответ. И что вы спрашиваете о кнопке «Назад», у меня есть этот ответ, но вам нужно создать еще один вопрос, потому что я думаю, что это будет хороший вопрос, и другие могут получить помощь от этого вопроса. Здесь лучше не отвечать. Спасибо... - person Fazal Rasel; 14.04.2014