Skip to content

Cabra.dev

  • Sobre
  • Faça uma Doação
  • E-Book
  • Cadastre-se
  • Política de Privacidade
  • Termos de Uso
  • Current Page Parent PortuguêsPortuguês
    • PortuguêsPortuguês
    • EnglishEnglish
  • Sobre
  • Faça uma Doação
  • E-Book
  • Cadastre-se
  • Política de Privacidade
  • Termos de Uso
  • Current Page Parent PortuguêsPortuguês
    • PortuguêsPortuguês
    • EnglishEnglish

Posts recentes

  • Crie DTOs com pouquíssimo código com PHP 8.1
  • Clean Archictecture T2:E1 – Explicação e Estrutura inicial
  • Redesenho dos Diagramas Clean Arch
  • #7 Clean Architecture – Infra Layer: Controllers e Presentation
  • #6 Clean Architecture – Infra Layer: Repository

Comentários

  • Clean Arch T2:E1 - Explicação do Projeto e Estrutura inicial | Cabra.dev em Redesenho dos Diagramas Clean Arch
  • Kilderson Sena em Criando um Input Widget no Yii2 – Parte 2/3
  • Kilderson Sena em #1 Clean Architecture – 10 centavos de teoria
  • Kilderson Sena em #2 Clean Architecture – Domain Layer
  • Rodrigo Afonso em #2 Clean Architecture – Domain Layer

Arquivos

  • março 2022
  • fevereiro 2022
  • janeiro 2022
  • abril 2021
  • abril 2020
  • agosto 2019
  • outubro 2018
  • setembro 2018
  • agosto 2018
  • agosto 2017
  • julho 2017
  • maio 2017
  • março 2017
  • fevereiro 2017
  • novembro 2016
  • outubro 2016
  • setembro 2016
  • julho 2016
  • junho 2016
  • maio 2016
  • abril 2016
  • março 2016
  • fevereiro 2016
  • dezembro 2015
  • novembro 2015
  • outubro 2015
  • setembro 2015
  • agosto 2015

Categorias

  • Arquitetura de Software
  • Eventos
  • Geral
  • Palestras
  • PHP
  • Segurança
  • Sem categoria
  • Yii2 Framework
  • Yii2 TV

Anúncios

Tags

api aplicação arquitetura arquitetura de software arquitetura limpa autenticação auth authentication banco de dados composer database database relations ddd designpattern devops docker forms formulários gii helpers identidade Identity input widgets interview layouts makarov model mvc nfs overview php phpcomrapadura relacionamentos relations rest segurança sessao views widgets yii yii2 yii3 yiiframework yiiframework2 yii relations
  • 2 de maio de 2016
  • 1
  • PHP Segurança Yii2 Framework

Autenticação no Yii2 – Parte I

  • Facebook
  • Twitter
  • Linkedin
  • email
  • Print
  • Pinterest

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!

  • Facebook
  • Twitter
  • Linkedin
  • email
  • Print
  • Pinterest

Tags: autenticaçãoauthidentidadeIdentityloginphpsegurançayiiyii2yiiframework

Kilderson Sena

Empreendedor, Experiente Analista e Desenvolvedor de Sistema e Líder de Equipes. Micro Empresário no ramo de Tecnologia, mas precisamente nos mercados de Desenvolvimento WEB, Desktop e Mobile.

You may also like...

  • #19 – Migrations

  • #33 Yii – Relacionamentos 3/3: Many-to-Many

  • #24 Yii – GridView

  • Next Autenticação no Yii2 – Parte II
  • Previous Segurança com PHP VI – CSRF

1 Response

  • Comments1
  • Pingbacks0
  1. Luis Antonio disse:
    29 de março de 2018 às 12:38

    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()

    Acesse para responder

Deixe um comentário Cancelar resposta

Você precisa fazer o login para publicar um comentário.

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

  • Sobre
  • Faça uma Doação
  • E-Book
  • Cadastre-se
  • Política de Privacidade
  • Termos de Uso
  • Current Page Parent PortuguêsPortuguês
    • PortuguêsPortuguês
    • EnglishEnglish

Cabra.dev © 2022. All Rights Reserved.