CakePHP: разрешить вход в систему с именем пользователя или электронной почтой - PullRequest
3 голосов
/ 02 ноября 2011

Я реализую логику, в которой вы можете использовать свое имя пользователя или адрес электронной почты для входа в CakePHP.Я следую примеру в книге под названием CakePHP 1.3: Поваренная книга по разработке приложений (Глава 1: Разрешение входа в систему с именем пользователя или электронной почтой).В книге объясняется, что когда компонент Auth не может войти в систему пользователя с предоставленной информацией, он возвращается к действию login () и может искать дополнительную информацию, которая может войти в систему пользователя с помощью логики в действии login ().

Код / логика работает.Тем не менее, когда я вхожу с моим адресом электронной почты, он все равно отображает сообщение loginError, которое говорит: «Указана неверная учетная запись».Ниже написано «Добро пожаловать» - сообщение, которое отображается при успешном входе в систему.

Вот что я хотел бы знать:

  1. В книге не указано, нормально это или нет, но я бы хотел научитьсяпропустите это сообщение об ошибке, так как оно не имеет смысла.Куда ЭТА ЛИНИЯ (в комментарии) ведет пользователя?После этой строки отображается сообщение об ошибке.

  2. .. и, возможно, отображается сообщение «Вы вошли в систему, используя электронную почту».Это имеет второстепенное значение.

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

class AppController extends Controller {
public $components = array(
    'Auth' => array(
        'authorize' => 'controller',
        'loginRedirect' => array(
            'admin' => false,
            'controller' => 'users',
            'action' => 'dashboard'
        ),
        'loginError' => 'Invalid account specified',
        'authError' => 'You don\'t have the right permission'
    ),
    'Session'
);
}


class UsersController extends AppController {
public function login() {
    if (
        !empty($this->data) &&
        !empty($this->Auth->data['User']['username']) &&
        !empty($this->Auth->data['User']['password'])
    ) {
        $user = $this->User->find('first', array(
            'conditions' => array(
                'User.email' => $this->Auth->data['User']['username'],
                'User.password' => $this->Auth->data['User']['password']
            ),
            'recursive' => -1
        ));

        if (!empty($user) && $this->Auth->login($user)) {   // $this->Auth->login() true if logs in
            if ($this->Auth->autoRedirect) {    // I think autoRedirect is TRUE by default

                $this->redirect($this->Auth->redirect()); // <<THIS LINE>>
            }
        } else {
            $this->Session->setFlash($this->Auth->loginError, $this->Auth->flashElement, array(), 'auth');
        }           
    }
}

Ответы [ 2 ]

1 голос
/ 02 ноября 2011
    if (!empty($user) && $this->Auth->login($user)) {
        $this->Session->delete('Message.auth');
    }

Вам не нужно устанавливать Flash для authError, если вы мигаете ('auth') в представлении входа в систему (как в кулинарной книге), и вам не нужно вызывать редирект.

0 голосов
/ 05 февраля 2012

Это тот же код, который объяснен в http://www.packtpub.com/cakephp-1-3-application-development-cookbook/book CakePHP 1.3. Руководство по разработке приложений , Я думаю, что это будет более эффективным, как это

if(!empty($user) && $this->Auth->login($user)){
                if($this->Auth->autoRedirect){
                    $this->Session->delete('Message.auth'); // kills login failed message after successful login
                    $this->redirect($this->Auth->redirect());
                } else {
                    $this->Session->setFlash($this->Auth->loginError, $this->Auth->flashElement, array(), 'auth');
                }
            }

в этом случае сообщение об ошибке входа в систему после успешного входа будет пропущено, а перенаправление останется без изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...