2012-01-22 1 views
1

У меня возникли проблемы с хешированием, как проверить, активен ли пользователь, используя новый компонент Auth. У меня есть 3 состояния, в которых пользователь может находиться: 0 неактивен (по умолчанию), 1 активирован, 2 деактивирован. Я пытаюсь реализовать это в функции входа, чтобы я мог вернуть, не зарегистрировались или не были заблокированы.Как вы можете проверить, активен ли пользователь в компоненте Cakephp 2.0?

Войти:

 public function login() { 
     if ($this->request->is('post')) { 
      if($this->Auth->login()) {     
       $results = $this->User->find('all', array(
        'conditions' => array('User.email' => $this->Auth->user('email')), 
        'fields' => array('User.is_active') 
       )); 
       if ($results['User']['is_active'] == 0) { 
        // User has not confirmed account 
        $this->Session->setFlash('Your account has not been activated. Please check your email.'); 
        $this->Auth->logout(); 
        $this->redirect(array('action'=>'login')); 
       } 
       // not working atm 
       else if ($results['User']['is_active'] == 2) { 
        // User has been deactivated 
        $this->Session->setFlash('Your account has been deactivated. Contact site admin if you believe this is in error.'); 
        $this->Auth->logout(); 
        $this->redirect(array('action'=>'login')); 
       } 
       else if ($results['User']['is_active'] == 1) { 
        // User is active 
         $this->redirect($this->Auth->redirect()); 
        } 
      } else { 
       $this->Session->setFlash(__('Your email/password combination was incorrect')); 
      } 
     } 
    } 

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

Update

Решил бросить User.is_active поле и обрабатывать все это в ролях. Я обрабатываю его в AppController, и он работает почти сейчас. В функции isAuthorized он теперь выдает ошибки, если пользователь заблокирован или неактивен, но мне также нужно его вывести из системы.

public function isAuthorized($user) { 
    // This isAuthorized determines what logged in users are able to see on ALL controllers. Use controller 
    // by controller isAuthorized to limit what they can view on each one. Basically, you do not want to allow 
    // actions on all controllers for users. Only admins can access every controller. 
    if (isset($user['role']) && $user['role'] === 'admin') { 
     return true; //Admin can access every action 
    } 
    elseif (isset($user['role']) && $user['role'] === 'unactivated') { // Account has not been activated 
     $this->Session->setFlash("You haven't activated your account yet. Please check your email."); 
     return false; 
    } 
    elseif (isset($user['role']) && $user['role'] === 'banned') { // Your account has been banned 
     $this->Session->setFlash("You're account has been banned. If you feel this was an error, please contact the site administrator."); 
     return false; 
    } 
    return false; // The rest don't 
} 

ответ

7

Если войти, информация модель пользователя можно получить с $this->Auth->user(). Таким образом, вы должны быть в состоянии сделать что-то вроде этого:

if ($this->Auth->login()) { 
    if ($this->Auth->user('is_active') == 0) { 
     // User has not confirmed account 
    } else if ($this->Auth->user('is_active') == 1) { 
     // User is active 

    // and so on 

Вы можете использовать debug($this->Auth->user()); после login(), чтобы понять, почему пользователи продолжают демонстрировать, как неактивированной.

+0

Продолжайте получать эту ошибку при этом: _Fatal error: вызов функции-члена user() для не-объекта в C: \ wamp \ www \ deals \ app \ View \ Layouts \ default.ctp в строке 103_ – Chris

+0

Если вы имеете в виду 'debug ($ this-> Auth-> user());', вы можете вызывать его только из контроллера, поскольку это компонент. Вы можете называть его так: «debug (AuthComponent :: user()),' – Wylie

+0

Итак, похоже, что он получает правильную информацию, поэтому он должен быть ошибкой в ​​моей логике. Во время входа в систему мне это нужно, чтобы поймать пользователей, которые были заблокированы, или пользователей, которые не подтвердили свою регистрацию, и сообщить им, что они были заблокированы или им необходимо подтвердить их регистрацию. Не уверен, что я даже пытаюсь сделать это в нужном месте. – Chris

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

  • Нет связанных вопросов^_^