У меня возникли проблемы с хешированием, как проверить, активен ли пользователь, используя новый компонент 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
}
Продолжайте получать эту ошибку при этом: _Fatal error: вызов функции-члена user() для не-объекта в C: \ wamp \ www \ deals \ app \ View \ Layouts \ default.ctp в строке 103_ – Chris
Если вы имеете в виду 'debug ($ this-> Auth-> user());', вы можете вызывать его только из контроллера, поскольку это компонент. Вы можете называть его так: «debug (AuthComponent :: user()),' – Wylie
Итак, похоже, что он получает правильную информацию, поэтому он должен быть ошибкой в моей логике. Во время входа в систему мне это нужно, чтобы поймать пользователей, которые были заблокированы, или пользователей, которые не подтвердили свою регистрацию, и сообщить им, что они были заблокированы или им необходимо подтвердить их регистрацию. Не уверен, что я даже пытаюсь сделать это в нужном месте. – Chris