Fala meus queridos amigos programadores! Parece uma pergunta idiota, mas, vocês alguma vez na vida já desenvolveu uma aplicação com Autenticação? Achou complicado ou chato? Então, vamos ver o quanto o Yii2 facilita nossa vida!
Autenticação é o processo de verificação da identidade do usuário. Geralmente é usado um identificador (exempo: um login ou endereço de e-mail) e um “token secreto” (exemplo: uma senha ou um token de acesso) para determinar se o usuário é quem ele diz ser.
Para implementar uma autenticação no Yii2 é muito simples, basta:
- Configurar o componente yii\web\User da aplicação;
- Criar uma classe que implemente a interface yii\web\IdentityInterface.
Dá uma olhadinha nos links de referência! =D
MAS SÓ ISSO? SIM CARO AMIGO, SOMENTE ISSO! =D
Vamos então fazer um exemplo de autenticação.
O componente User (vamos chama-lo assim daqui pra frente) da aplicação gerencia o status de autenticação dos usuários. Ele requer que você especifique uma classe que implemente a interface yii\web\IdentityInterface, como falado anteriormente.
Importante: estou supondo que você está utilizando o template basic de uma aplicação do yii2.
Abra o seu arquivo de configuração apppath/config/web.php, e dentro de components, configure o seu componente de autenticação desta forma:
'components' => [ ... 'user' => [ 'identityClass' => 'app\models\User', ], ... ]
Estamos simplesmente registrando o componente e dizendo que a classe de identidade (guarde bem esse termo) é a classe User, que encontra-se dentro do namespace/pacote app\model. Entendido aqui, vamos a diante!
Criando a Classe de Identidade
Vamos criar uma arquivo chamado User.php dentro do diretório models.
Antes de codar essa classe, quero deixar duas coisas bem claras:
- O nome da User não é obrigatório, foi apenas sugestivo para o artigo. Se você quiser que seja MinhaClasseIdentidade não tem problema nenhum, sendo que o mesmo implemente a interface citada acima;
- Também não é necessário que a classe esteja dentro de models, pode ficar em qualquer lugar na sua aplicação;
- em 99,9999% das aplicações, essa classe é um model e representa uma tabela de usuários do seu banco de dados, então, nossa classe extenderá da Classe ActiveRecord.
Vamos criar uma simples tabela chamada user e nosso Model User:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `auth_key` varchar(32) NOT NULL, `email` varchar(255) NOT NULL, `password` varchar(255) NOT NULL, `token` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), UNIQUE KEY `password_reset_token` (`password_reset_token`) ) ENGINE=InnoDB;
<?php namespace app\models; class User extends ActiveRecord implements IdentityInterface { ... public static function findIdentity($id) {} public static function findIdentityByAccessToken($token, $type = null) {} public function getId() {} public function getAuthKey() {} public function validateAuthKey($authKey) {} ... }
Como vocês podem ter percebido, minha classe é um ActiveRecord que representa minha tabela user.
Nó código acima eu ocultei o PHPDoc, AttributeLabels, rules e etc, isso você já deve tá careca de saber. No código acima vocês viram que fomos obrigados a implementar alguns métodos:
- findIdentity(): ele procura por uma instância da classe de identidade usando o ID de usuário especificado. Este método é usado quando você precisa manter o status de login via sessão;
- findIdentityByAccessToken(): ele procura por uma instância da classe de identidade usando o token de acesso informado. Este método é usado quando você precisa autenticar um usuário por um único token secreto (exemplo: em uma aplicação stateless RESTful);
- getId(): retorna o ID do usuário representado por essa instância da classe de identidade;
- getAuthKey(): retorna uma chave para verificar login via cookie. A chave é mantida no cookie de login e será comparada com o informação do lado servidor para testar a validade do cookie;
- validateAuthKey(): implementa a lógica de verificação da chave de login via cookie;
Se você já entendeu a essência do negócio, vamos agora implementar os métodos da nossa classe.
<?php namespace app\models; class User extends ActiveRecord implements IdentityInterface { ... public static function findIdentity($id) { return static::findOne($id); } public static function findIdentityByAccessToken($token, $type = null) { return static::findOne(['token' => $token]); } public function getId() { return $this->id; } public function getAuthKey() { return $this->auth_key; } public function validateAuthKey($authKey) { return $this->auth_key === $authKey; } ... }
Bom galera, já estamos mais de meio caminho andado aqui! Nessa primeira parte, configuramos e criamos nossa classe de Identidade! Na segunda parte iremos fazer um formulário onde serão informados o e-mail e senha de acesso para efetuarmos a autenticação na aplicação!
Um forte abraço a todos e até a parte 2 dessa artigo!
Bons estudos!
Boa Tarde Kilderson!
Cara fiz todo os tudo, quando fui testar no projeto apareceu esse erro: PHP Compile Error – yii\base\ErrorException
Cannot redeclare app\models\User::findIdentity()