2015-04-15 2 views
1

Вот кодCakePHP - выпуск с функцией Вход

UsersController.php

<?php 

class UsersController extends AppController 
{ 
    public function login() 
    { 
     if ($this->request->is('post')) { 
      if ($this->Auth->login()) { 
       return $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 

class User extends AppModel 
{ 

    public function beforeSave($options = array()) 
    { 
     if (isset($this->data[$this->alias]['password'])) { 
      $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); 
     } 

     return true; 
    } 
} 


login.ctp (просмотреть файл)

<?php 
echo $this->Session->flash('auth'); 
echo $this->Form->create('User'); 
echo $this->Form->input('username'); 
echo $this->Form->input('password', array('type' => 'password')); 
echo $this->Form->end(__('Login')); 
?> 


AppController.php

<?php 

class AppController extends Controller 
{ 
    public $components = array(
     'DebugKit.Toolbar', 
     'Session', 
     'Auth' => array(
      'loginRedirect' => array(
       'controller' => 'books', 
       'action' => 'view' 
      ), 
      'logoutRedirect' => array(
       'controller' => 'pages', 
       'action' => 'home' 
      ), 
     ) 
    ); 
} 

Имя таблицы: пользователи

Я новичок в CakePHP, я просто написал код для простого действия входа ,
Когда я попытался войти с правильными учетными данными, он всегда показывает неверное имя пользователя и пароль

$this->Auth->login() всегда возвращает ложное значение, даже предоставляю правильное имя пользователя и пароль. Пожалуйста, дайте мне решение. Спасибо.

+0

Вы внедряете пароль? –

ответ

2

Вы должны попробовать это

В базе данных CakePHP, имя таблицы должно быть во множественном числе. Название модели должно быть уникальным с помощью CamelCase. Контроллер должен быть множественным числом с добавлением суффикса CamelCase Контроллер должен быть добавлен. Просмотр имени папки всегда совпадает с именем контроллера множественного числа (без суффикса) и .ctp имя файла должно быть глаголом.

AppController.php

<?php 
class AppController extends Controller { 

    public $components = array(
     'RequestHandler','Session', 
     'Auth' => array(
      'Autoredirect'=>false, 
      'loginRedirect' => array('controller' => 'books', 'action' => 'view'), 
      'logoutRedirect' => array('controller' => 'pages', 'action' => 'home'), 
      'authError' => 'Did you really think you are allowed to see that?', 
     ) 
    ); 
}  
?> 

UsersController.php

<?php 

class UsersController extends AppController 
{ 
    var $helpers = array('Html', 'Form','Js','Session'); 
     public $components = array(
      'RequestHandler', 
      'Session' 
    ); 

public function login(){ 
     if ($this->request->is('post')) { 
      if ($this->Auth->login()) { 
       $this->Session->setFlash('You are successfully login','default',array('class'=>'alert alert-success')); 
       return $this->redirect($this->Auth->redirect()); 
      } 
      return $this->Session->setFlash('Invalid username and password,please try again','default',array('class'=>'alert alert-danger'));  
     } 
    } 
} 
?> 

login.ctp

<?php echo $this->Session->flash(); ?> 
    <?php echo $this->Form->create('User'); ?> 
     <div class="form-group"> 
     <label>Email</label> 
     <?php echo $this->Form->input('User.username');?> 
     </div> 
     <div class="form-group"> 
     <label>Password</label> 
     <?php echo $this->Form->input('User.password');?> 
     </div> 
     <div class="form-group"> 
    <?php echo $this->Form->button('Login',array('type'=>'submit','class'=>'btn btn-primary btn-block')); ?> 
</div> 
    <?php echo $this->Form->end(); ?> 

AppModel.php

App::uses('SimplePasswordHasher', 'Controller/Component/Auth'); 
    class AppModel extends Model { 
     public $components = array(
     'Auth' => array(
      'authenticate' => array(
       'Form' => array(
        'passwordHasher' => array(
         'className' => 'Simple', 
         'hashType' => 'sha1' 
        ) 
       ) 
      ) 
     ) 
    ); 
     public function beforeSave($options = array()) { 
      if (!empty($this->data[$this->alias]['password'])) { 
       $passwordHasher = new SimplePasswordHasher(array('hashType' => 'sha1')); 
       $this->data[$this->alias]['password'] = $passwordHasher->hash(
        $this->data[$this->alias]['password'] 
       ); 
      } 
      return true; 
     } 
    } 
    ?> 

User.php (Модель пользователя)

<?php 
     class User extends AppModel 
     { 
     public $validate = array(
      'username' => array(
       'alphaNumeric' => array(
        'rule' => 'alphaNumeric', 
        'required' => true, 
        'message' => 'Letters and numbers only' 
       ), 

      ), 
      'password' => array(
       'rule' => array('minLength', '8'), 
       'message' => 'Minimum 8 characters long' 
      ), 
     ); 
    } 
    ?> 
+0

Спасибо за ваш ответ, но его не работает снова такая же проблема :( –

0

я случайно ограничили поле пароля в базе данных, так что пароль хранится частично в БД, который причина этого вопроса.

Смежные вопросы