Simples aplicação real time com Angular 4 e Firebase, parte 5

Nesse artigo irei mostrar como fazer um formulário de login usando a api de autenticação do firebase.

Angular + Firebase
#1 | #2 | #3 | #4 | #5 | #6
Disclaimer
Esses artigos foram escritos entre maio e junho de 2017, muita coisa mudou desde lá, então procure usar as libs e referências mais atualizadas para implementar os passos que são aqui descritos
fontes: https://github.com/evlymn/simplesapprealtime

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

Link Authentication

Vá 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

Método de login email/senha
Método de login email/senha
Método de login ativado
Método de login ativado

Agora vamos voltar na aba usuários e cadastrar um usuário, clique me adicionar um usuário, informe um email e uma senha forte, por exemplo: 11223344

Adição de usuário
Adição de usuário
Usuário criado
Usuário criado

Perfeito, até agora tudo bem, simples né?
Bom eu achei rsrs
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
ng g c login
ng g c login
ng c m login
ng c m login
ng g c login/login-form
ng g c login/login-form
componentes e módulo criados
componentes e módulo criados

Ótimo, se vc chegou a esse resultado podemos já criar as rotas 🙂
No terminal, na pasta do aplicativo digite

touch src/app/app.routing.module.ts
arquivo app.routing.module.ts criado
arquivo app.routing.module.ts criado

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’;
Linhas adicionadas
Linhas adicionadas

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 { }
Código do roteamento
Código do roteamento

Agora precisamos importar esse módulo no app.module.ts

AppRoutingModule importado
AppRoutingModule importado

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 { }
app.module arrumadinho
app.module arrumadinho

Mas isso não é o suficiente, precisamos mexer ainda no template html do app.component, retirar o que tem e colocar a tag <router-outlet> ela que vai identifcar e fazer o roteamento, deixe como no exemplo abaixo:

<router-outlet></router-outlet>
tag <router-outlet>
tag <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

Login Form sendo roteado
Login Form sendo roteado
Tudo funcionando ❤
Tudo funcionando ❤

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á! rsrs

FormsModule importado
FormsModule importado

Voltando a autenticação vamos precisar colocar no login.module a declaração do provider do AngularFireAuth

import { AngularFireAuth } from ‘angularfire2/auth’;
providers:[AngularFireAuth]
provider angularfireauth
provider angularfireauth

Agora vamos colocar os campos no template html do login-form e escrever o código para ele.

template html do login-form
template html do login-form

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’;
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.

login-form.component
login-form.component

Agora vamos dar uma mexidinhazona no cadastro-pessoa-form =D 
No template html apenas iremos adicionar um botão para deslogar

deslogar

Agora no cadastro-pessoa-form.component.ts temos algumas coisas mais 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

cadastro-pessoa-form.component.ts
cadastro-pessoa-form.component.ts

Vamos ver se está tudo funcionando??

ng serve

Abra o navegador abra as feramentas de desenvolvedor e vá na aba Application

login
login

Vamos logar

email e usuário
email e usuário

Note que ao logar ele adicionou um item ao Local Storage, é assim que o firebase gerencia a sessão de login.
Se vc clicar em deslogar esse item irá desaparecer, evaporar, sumir, ir para outra dimensão, enfim, não importa, desde que funcione =D

Local Storage
Local Storage
Sumiu!!!
Sumiu!!!

Gentem, por hoje é isso, na próxima parte pretendo ver a criação de usuários, até! =D

Bjusss

1

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *