2012-05-24 6 views
0

Я пытаюсь создать просто страницу входа. Я хочу, чтобы проверка на этой странице так, что, когда пользователь нажимает логин, сайт проверяет, что в активированной базе данных пользователей установлено значение 1, если нет, они не могут войти в систему. Я все еще очень новичок в cakephp и стараюсь быстро подобрать, поэтому мне жаль, если это простой вопрос начинающего.CakePHP 2.0 Проверка учетной записи

здесь проверка в моей модели пользователя

public $checkActive = array(
    'activated'=>array(
      'rule'=>array('equalTo', '0'), 
      'message'=>'The account must be activated, please check your email.' 
     )); 

здесь функция Войти в моей UsersController

public function login() { 

    $this->set('title_for_layout', 'Individual Registration'); 
    $this->set('stylesheet_used', 'style'); 
    $this->set('image_used', 'eBOXLogo.jpg'); 


    if ($this->request->is('post')){ 
    if ($this->request->data['User']['password'] == 'qazwsx'){ 
    if ($this->Auth->login()){ 
    if (0 === $this->User->find('count',array('conditions'=>array('enabled'=>1,'login'=> $username)))) { 
     $this->Session->setFlash('Sorry, your account is not validated yet.'); 
    } 

     $this->Auth->user('id'); 
     $this->redirect($this->Auth->redirect('eboxs/home')); 
     } 
    } 
    else { 

     $this->Session->setFlash('Username or password is incorrect'); 
    } 
    }else{ 
    $this->Session->setFlash('Welcome, please login'); 
    } 


} 

вот моя beforeLogin функция в приложении UsersController

public function beforeLogin(){ 

    if(isset($this->data['User']['password'])){ 
     $this->data['User']['password'] = AuthComponent::password($this->data['User']['password']); 
     } 
     return true; 
    } 

контроллер

class AppController extends Controller { 

    public $components = array(
     'DebugKit.Toolbar', 
     'Session', 
     'Auth'=>array(
      'loginRedirect'=>array('controller'=>'users', 'action'=>'login'), 
      'logoutRedirect'=>array('controller'=>'users', 'action'=>'login'), 
      'authError'=>"You can't access this page", 
      'authorize'=>array('Controller') 
     ) 
    ); 

    public function isAuthorized($user){ 
     return true; 
    } 

    public function beforeFilter(){ 
    $this->Auth->allow('index','view'); 
    $this->set('logged_in', $this->Auth->loggedIn()); 
    $this->set('current_user',$this->Auth->user()); 

    } 

Я понимаю, что в моем контроллере нет вызова для проверки, но с моей другой проверкой, такой как имя пользователя, уникально, мне не нужно было его называть.

вкратце на тот момент, когда любой пользователь может войти в мою страницу, я пытаюсь сделать так, чтобы только те, у кого есть 1 в активированном поле в таблице пользователей, могут войти в систему.

+1

Почему вы проверить пароль вручную? Пожалуйста, разместите свою настройку компонента Auth (должен быть в вашем AppController) – Dunhamzzz

+0

отправил контроллер приложения – user1393064

ответ

1

Одним из вариантов было бы проверить проверку учетных записей сразу после входа в систему, как это:

<?php 
if ($this->request->is('post')){ 
if ($this->request->data['User']['password'] == 'qazwsx'){ 
if ($this->Auth->login()) { 

    // login ok, but check if activated 
    $username = $this->request->data['User']['username']; 
    if (0 === $this->User->find('count',array('conditions'=>array('activated'=>1,'username'=> $username)))) { 
     $this->Session->setFlash('Sorry, your account is not validated yet.'); 
     $this->redirec($this->referer()); 
    } 

    $this->Auth->user('id'); 
    $this->redirect($this->Auth->redirect('eboxs/home')); 
    } 
} 
+0

этот код заблокировал всех от входа, в том числе тех, кто активирован = 1 – user1393064

+0

, также не появилось setflash, пришло сообщение с ошибкой в ​​базе данных о том, что нам не хватало представления для pdo.ctp в представлениях ошибок – user1393064

+0

ok, обновил код с 'true' на «1», для «активированного» поля и переадресовать референт() на место. –

1

Добавить scope вариант вашей установки Идент:

'Auth'=>array(
     'loginRedirect'=>array('controller'=>'users', 'action'=>'login'), 
     'logoutRedirect'=>array('controller'=>'users', 'action'=>'login'), 
     'authError'=>"You can't access this page", 
     'authorize'=>array('Controller'), 
     'scope' => array('User.activated' => 1) 
    ) 

Это позволит пользователю входить в систему, если они не имеют User.activated = 1.

Кроме того, загляните в свой auth setup and re-read the manual page for CakePHP 2.0, вы конфигурируете, как 1.3. Вам не нужно будет самостоятельно проверять пароль, и вам определенно не нужен метод beforeLogin для такой простой настройки.

+0

. Я изменил его на код выше, и он не изменил – user1393064

+0

, это предотвратит ведение журнала, но не содержит никаких подсказок, почему он не занесен в журнал –

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