Pergunta

Eu sou novo para CakePHP e enquadramentos e eu tentei ao Google em busca de uma resposta sem qualquer sorte.

Eu estou usando a função de login em branco () e quer ser capaz de registros de usuário de mudança no login (como last_login). Como posso fazer isso?

Foi útil?

Solução

Se você estiver usando o componente Auth do bolo, primeiro você terá que inserir a seguinte linha em sua função beforeFilter:

$this->Auth->autoRedirect = false;

A definição deste como falsa permitirá o seguinte código para executar após a função de login do CakePHP fez a sua magia.

Na sua função de login add:

if ($this->Auth->User()) {
$this->User->id = $this->Auth->user('id');
$this->User->saveField('last_login', date('Y-m-d H:i:s'));
}

Nota:. Certifique-se de que você tem o campo last_login em sua tabela de usuários e seu conjunto para datetime

Outras dicas

Assumindo que você está usando o construído em AuthComponent em você aplicativo, você precisa definir a seguinte propriedade em seu controlador:

$this->Auth->autoRedirect = false;

Isto irá permitir que você use sua função login() (e logout()) para fazer coisas. Informações sobre o usuário conectado no momento está disponível através

$this->Auth->user()

Você pode então usar esses dados para fazer o que quiser com esse usuário.

Como uma desavergonhada auto-promoção, eu sugiro que você dê uma olhada em meu aberta projeto de código, onde eu estou usando esta técnica para criar um "remember me" cookie.

Eu acredito que você pode adicionar coisas para a função login (), mesmo com autoRedirect conjunto para true. Eu tive alguns problemas com o redirecionamento implícita (solicitações de usuários restrito de recursos, tem de login, então é redirecionado), então eu adicionei alguns códigos na minha função de login. Parece funcionar bem, e a função de login automagic é chamado além.

Eu diria que ir em frente e adicionar alguma lógica para login, ver se ele funciona para você.

Um teste padrão que eu gosto é criar um gancho afterLogin () no modelo de usuário. Assim, no seu UsersController criar algo como:

function beforeFilter() {
    $this->Auth->autoRedirect = false;
    parent::beforeFilter();
}

function login() {
    if($this->Auth->User()) {
        if(!$this->User->afterLogin($this->Auth->User())) {
            return $this->logout();
        }

        $this->redirect($this->Auth->redirect());
    }
}

Em seguida, no modelo de usuário criar:

function afterLogin($User) {
    // perform actions on $User here

    return true; // return false to halt login
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top