2012-02-13 1 views
0

Я попытался настроить страницу входа в систему, но когда я пытаюсь войти в систему, даже с неправильным именем пользователя/паролем, переадресация торта на страницу входа в систему (функция выхода из системы перенаправляется правильно) , Даже если я подключу неправильную информацию, я вообще не вижу ошибок, я не понимаю. Вот мой код контроллера:страница входа в систему cakephp никуда не годится

class UsersController extends AppController { 
public $name='Users'; 
public $layout='pagelayout'; 
public $uses=array('User'); 



public function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow('add', 'logout', 'overview'); 
} 

public function login() { 
$this->set('title', 'Log in to your Gulf Shores 4 Less account'); 
if ($this->request->is('post')) { 
    if ($this->Auth->login()) { 
     return $this->redirect($this->Auth->redirect()); 
    } else { 
     $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth'); 
    } 
} 

}

и вот моя модель:

<?php 
App::uses('AuthComponent', 'Controller/Component'); 
class User extends AppModel { 
public $name='User'; 
public $hasMany=array('Unit', 'Complex', 'Coupon', 'Location', 'Image', 'Charter', 'Course', 'Nightclub', 'Store'); 

public function beforeSave() { 
if (isset($this->data[$this->alias]['password'])) { 
    $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']); 
} 
return true; 
} 
public $validate = array(
    'username' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'A username is required' 
     ) 
    ), 
    'password' => array(
     'required' => array(
      'rule' => array('notEmpty'), 
      'message' => 'A password is required' 
     ) 
    ), 
    'role' => array(
     'valid' => array(
      'rule' => array('inList', array('admin', 'advertiser')), 
      'message' => 'Please enter a valid role', 
      'allowEmpty' => false 
     ) 
    ) 
); 
} 

?> 

Вот код из AppController:

<?php 
class AppController extends Controller { 
public $components = array(
    'Session', 
    'Auth' => array(
     'loginRedirect' => array('controller' => 'users', 'action' => 'overview'), 
     'logoutRedirect' => array('controller' => 'pages', 'action' => 'index') 
    ) 
); 


function beforeFilter() { 
    $this->Auth->allow('login','index', 'view', 'condos', 'houses', 'hotels_and_motels', 'print_all_coupons', 'print_coupon', 'search', 'golf', 'charters', 'events', 'nightlife', 'shopping', 'visitors_info', 'contact_us'); 
} 
} 
?> 

и здесь вид код:

<div class="users form"> 
<?php echo $this->Session->flash('auth'); ?> 
<?php echo $this->Form->create('User');?> 
<fieldset> 
    <legend><?php echo __('Please enter your username and password'); ?></legend> 
<?php 
    echo $this->Form->input('username'); 
    echo $this->Form->input('password'); 
?> 
</fieldset> 
<?php echo $this->Form->end(__('Login'));?> 
</div> 

Как вы можете видеть, я довольно много копировал и вставлял то, что было в руководстве Cakephp-2.0 для этого. Единственная разница между моей таблицей db и руководством заключается в том, что мой пароль хранится как хэш MD5 в моей таблице пользователей. я не могу понять, где это сошло с рельсов.

+0

** Обновление ** Я изменил функцию мой логин(), что теперь дает мне сообщение об ошибке, когда информация для входа неверна. Я думаю, проблема в том, что, поскольку мои пароли хранятся в db с хешами MD5, он не проверяет правильный пароль. Как я могу сказать Cake, чтобы использовать хэш-проверку MD5? – huzzah

+0

** Обновление ** Снова. Я читал, что хэш-хэш по умолчанию - sha1, поэтому я сменил один из своих паролей на хэш-код sha1, и все же я остаюсь на странице входа (он все еще говорит мне неправильное имя пользователя/пароль) – huzzah

ответ

1

Убедитесь, что ваши пароли хранятся с использованием хэша компонента Auth. AFAIK, нет поддержки «простых» паролей md5. Хеши Генерация торта более сложна, чем md5.

См. documentation для получения информации о том, как хешировать ваши пароли. Если вы переходите из приложения, использующего хеширование md5, вам придется сбросить все пароли к чему-то случайному для всех ваших пользователей.

+0

Хорошо, я уже застрял в хранении в мою модель, но я тестировал, создавая пользователя (и он работал правильно, перенаправляя на правую страницу). Проблема в том, что у моих уже созданных пользователей неправильный хэш. Я могу определенно изменить их, поскольку это все еще в режиме тестирования, мне просто нужно точно знать, что делает торт, поэтому я могу найти правильный онлайн-хэш-генератор. – huzzah

+1

В phpmyadmin есть функция SHA1, которую вы можете использовать для преобразования. Это то, что вы делали? – Vigrond

+0

Ну, нет, я этого не делал. Я не знал, что могу это сделать! Это буквально мой первый день, пытаясь сделать страницу входа и использовать хеши и все такое. В любом случае, я вошел в свой db и написал пароль для уже созданного пользователя, положил SHA1 как функцию на него в phpmyadmin, и он * sigh * не работал. Все еще давая мне ошибку «неправильное имя пользователя/пароль», а не перенаправление. – huzzah

0

Вы можете попробовать использовать следующие коды на файле AppController.php

AppController.php

$this->Auth->authenticate = array(
      AuthComponent::ALL => array('userModel' => 'User'), 
      'Form' => array(
       'fields' => array('username' => 'email') 
      ) 
     ); 
     $this->Auth->authorize =false; 
     $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); 
     $this->Auth->fields = array('username' => 'email', 'password' => 'password'); 
     $this->Auth->loginRedirect = array('controller' => 'media', 'action' => 'index/'); 
     $this->Auth->logoutRedirect = '/logout'; 
     $this->Auth->loginError = 'Invalid e-mail/password combination. Please try again'; 
Смежные вопросы