Neste artigo, irei mostrar como fazer um formulário de login usando a API de autenticação do firebase.
Uma situação que teremos que implementar para seguirmos na autenticação, são as rotas, sem elas o nosso aplicativo não saberá quem apresentar para login e cadastro de pessoas.
Bem, vamos lá, primeiramente iremos habilitar a autenticação. No console do firebase clique no link Authentication.
Vá na aba métodos de login, clique em e-mail/senha, ative esse provedor de login e clique em salvar. Vamos usar esse método por ser mais simples e não precisar de outras configurações.
Agora, vamos voltar na aba usuários e cadastrar um usuário. Clique em adicionar um usuário, informe um email e uma senha forte, por exemplo: 11223344
Perfeito. Até agora tudo bem simples, né? Bom, eu achei, rs. Vamos deixar isso tudo quietinho por enquanto e vamos criar nosso componente de login e as rotas. No terminal, dentro da pasta do aplicativo iremos criar o componente login, o módulo desse componente e um componente dentro dele chamado login-form. Para isso, digite:
ng g c login ng g m login ng g c login/login-form
Ótimo, se você chegou nesse resultado, já podemos criar as rotas. No terminal, na pasta do aplicativo, digite:
touch src/app/app.routing.module.ts
Arquivo criado, vamos adicionar algum código, coloque as linhas abaixo no arquivo.
import { NgModule, ModuleWithProviders } from ‘@angular/core’; import { Routes, RouterModule } from ‘@angular/router’;
Vamos adicionar as referências dos nossos componentes e escrever o resto da implementação para o roteamento.
import { LoginFormComponent } from ‘./login/login-form/login-form.component’; import { CadastroPessoaComponent } from ‘./cadastro-pessoa/cadastro-pessoa.component’; const APP_ROUTES: Routes = [ { path: ‘’, component: LoginFormComponent }, { path: ‘cadastro’, component: CadastroPessoaComponent } ] @NgModule({ imports: [RouterModule.forRoot(APP_ROUTES)], exports: [RouterModule] }) export class AppRoutingModule { }
Agora precisamos importar esse módulo no app.module.ts
Tem algumas coisinhas a se ajeitar ainda, por exemplo coloca a referencia do login.module no nosso app.module e retirar a de LoginComponent
import { BrowserModule } from ‘@angular/platform-browser’; import { NgModule } from ‘@angular/core’; import { FormsModule } from ‘@angular/forms’; import { HttpModule } from ‘@angular/http’; import { AppComponent } from ‘./app.component’; import { AngularFireModule } from ‘angularfire2/index’; import { FirebaseConfig } from ‘./../environments/firebase.config’; import { AppRoutingModule } from ‘./app.routing.module’; import { CadastroPessoaModule } from ‘./cadastro-pessoa/cadastro-pessoa.module’; import { LoginModule } from ‘./login/login.module’; @NgModule({ declarations: [ AppComponent ], imports: [ BrowserModule, FormsModule, HttpModule, CadastroPessoaModule, AngularFireModule.initializeApp(FirebaseConfig), AppRoutingModule, LoginModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }
Mas isso não é o suficiente, precisamos mexer ainda no template html do app.component, retirar o que tem e colocar a tag **** ela que vai identifcar e fazer o roteamento, deixe como no exemplo abaixo:
<router-outlet></router-outlet>
Vamos ver se está tudo ok? Vamos rodar a aplicação. No terminal digite o famigerado comando:
ng serve
Se tudo deu certo vc poderá ver o roteamento funcionando, levando primeiramente para o componente de login como descrito no arquivo app.routing e para voltar a visualizar o cadastro digite /cadastro no final do endereço.
Estava vendo no código e acabei esquecendo um detalhe, declarar o login.component no login.module também o importar o FormsModule
@NgModule({ imports: [ CommonModule, FormsModule ], declarations: [LoginFormComponent, LoginComponent], exports:[LoginComponent, LoginFormComponent] })
Então… seria bom colocar lá! rs
Voltando à autenticação, vamos precisar colocar no login.module a declaração do provider do AngularFireAuth
Agora vamos colocar os campos no template html do login-form e escrever o código para ele.
Agora vamos adicionar o código no login-form.component.ts Observe que adicionei dois imports
import { AngularFireAuth } from ‘angularfire2/auth’; import { Router } from ‘@angular/router’;
E adicione ao construtor o seguinte trecho:
constructor(private afAuth: AngularFireAuth, private router: Router) { }
Um é o objeto do angularfire2 responsável pela autenticação e o outro é router que vai nos enviar para a página de cadastro logo após o login.
Agora vamos modificar um pouco o cadastro-pessoa-form. No template html apenas iremos adicionar um botão para deslogar.
Agora no cadastro-pessoa-form.component.ts, ainda temos algumas coisas a fazer. Vamos importar o Router e AngularFireAuth.
import { AngularFireAuth } from ‘angularfire2/auth’; import { Router } from ‘@angular/router’;
Vamos adicionar um método de logout também.
Vamos ver se está tudo funcionando?
ng serve
Abra o navegador, em seguida vá para aba feramentas de desenvolvedor e selecione Application.
Vamos logar!
Note que ao logar, ele adicionou um item ao Local Storage. É assim que o firebase gerencia a sessão de login. Se você clicar em deslogar, esse item irá desaparecer e o que importa é funcionar.
Gente, por hoje é isso. Na próxima parte pretendo ver a criação de usuários, até!
Beijos