---
# System prepended metadata

title: ':a: Angular 8'
tags: [angular, ter-qui, 10-03-2020, noite]

---

# :a: Angular 8 

* Projeto Node JWT, lista de usuarios, listar, gerar token, Postman para teste
* Projeto angular, validação, serviço, template, Router, Modulo

> [color=blue] [name=Prof Edson Belém - profedsonbelem@gmail.com] [time=Terca, Jul 28, 2020]
> 

> [color=green] [name=Profa Luciana Medeiros - lucianamedeiros.coti@gmail.com] [time=Terca, Jul 28, 2020]
> 

## :eye: Estrutura do projeto Node depois de finalizado:
![](https://i.imgur.com/JkGrUCz.png)

### :coffee: User.js
```javascript=
const Users = [
    {
        idUsuario: 10,
        nome: "belem",
        login: "belem@gmail.com",
        password: "123456"
    },
    {
        idUsuario: 11,
        nome: "lu",
        login: "lu@gmail.com",
        password: "123456"
    },
    {
        idUsuario: 12,
        nome: "jhansen",
        login: "jhansen@gmail.com",
        password: "123456"
    }
]

module.exports = Users
```

### :coffee: Produtos.ts
```javascript=

const Produtos = [{
    idProduto: 10,
    nomeProduto: "havainas",
    preco: 100,
    oldimagem: "imagem2",
    newimagem: "imagem1",
},
{
    idProduto: 11,
    nomeProduto: "chinelo nike",
    preco: 20,
    oldimagem: "imagemnike1",
    newimagem: "imagemnike2",
},
{
    idProduto: 10,
    nomeProduto: "mocassim",
    preco: 20,
    oldimagem: "imagem2",
    newimagem: "imagem1",
}
]

module.exports = Produtos
```

### :coffee: package.json
```json=
{
	"name": "token",
	"version": "1.0.0",
	"main": "server.js",
	"scripts": {
		"test": "echo \"Error: no test specified\" && exit 1"
	},
	"author": "",
	"license": "ISC",
	"description": "",
	"dependencies": {
		"body-parser": "^1.19.0",
		"cors": "^2.8.5",
		"express": "^4.17.1",
		"jsonwebtoken": "^8.5.1"
	}
}
```

## :warning: Instalar as bibliotecas.
Digitar no terminal:
```
npm i
```


### :coffee: server.js
```javascript=
const express = require('express');
const bodyParser = require('body-parser');
const cors = require("cors");

const User = require('./Model/Users');
const Produtos = require('./Model/Produtos');
const app = express();
const jwt = require('jsonwebtoken');
const secret = 'senhasupersecreta'

app.use(cors());
app.use(bodyParser.json());

//protegido  (function protecao)
app.get("/adm/produto", fnValidacao, (req, res, next) => {
	res.json(Produtos);
})

app.post("/auth", function (req, res) {
	let usu = req.body;
	let msg = "";
	let resp = { "ok": msg };
	console.log(usu);

	let logado = User.filter((res) => {
	if (res.login == usu.login && res.password == usu.password) {
			return res;
		} else {
			return null;
		}
	})[0];
	console.log(logado);
	if (logado) {
		let token = jwt.sign({
			'login': logado.login
		}, secret);
		resp.token = token;
		console.log(resp.token);
	} else {
	res.status(401).json({ msg: 'Usuario ou senha invalidos' });
		return
	}
	res.json(resp.token);
});



function fnValidacao(req, res, next) {
	let erro = { success: false, msg: 'Erro de autenticacao' };
	let authorization = req.headers['authorization'];
	console.log(authorization);

	if (authorization) {
		let token = authorization.split(' ')[1];
	console.log('Autorizacao: ', JSON.stringify(authorization));
		console.log('Token: ', token);
		jwt.verify(token, secret, function (err, decoded) {
			if (err) {
				console.log('Erro: ', err);
				res.status(403).json(erro);
				return;
			} else {
				console.log("show");
				next();
			}
		});
		return;
	}
	res.status(401).json(erro);
}


app.listen(3010, function () {
	console.log('Servidor iniciado na porta 3010');
})
```

## :warning: Iniciar o projeto.
Digitar no terminal:
```
node server.js
```

## :warning: Testar no Postman
* **Listar** os produtos sem autenticar. Mostra mensagem de erro pois não passou o **token**.
http://localhost:3010/adm/produtos
![](https://i.imgur.com/JZ8maoZ.png)

* Para testar o **login**.
http://localhost:3010/auth
Selecionar POST -> Digitar a URL -> Clicar em BODY -> Clicar em RAW -> Selecionar JSON -> Digitar os dados -> Clicar em SEND
![](https://i.imgur.com/hjcZElQ.png)

Resultado. Gerou o token
![](https://i.imgur.com/qtYd5KG.png)

:eye: Visualizando no console do Visual Code
![](https://i.imgur.com/K7kNUvx.png)

## :eye: Estrutura do projeto Angular depois de finalizado:
![](https://i.imgur.com/SdeXuu1.png)

readme.md
```
localhost:3010/auth
localhost:3010/adm/produto

ng g c login

ng generate module usuario

ng g c user
```

### :a: usuario.ts
```typescript=
export class Usuario {
    idUsuario: number;
    nome: string;
    login: string;
    password: string;
    token: string = "";
    
    constructor(idUsuario?: number, nome?: string, login?: string, 
    password?: string) {
        this.idUsuario = idUsuario;
        this.nome = nome;
        this.login = login;
        this.password = password;
        this.token = "";
    }

    public isLogin() {
        let regra = /^([a-AA-Z0-9])+@([a-AA-Z0-9])+\.([a-A])+$/
        return regra.test(this.login);
    }


    public isSenha() {
        let regra = /^[a-zA-Z0-9]{6,15}$/
        return regra.test(this.password);
    }


}
```

### :a: usuario.service.ts
```typescript=
import { Usuario } from '../model/usuario';
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';

const URL = 'http://localhost:3010';

@Injectable()
export class UsuarioService {

    constructor(private http: HttpClient) {

    }

    public login(usuario: Usuario): Observable<Usuario> {
        return this.http.post<Usuario>(`${URL}/auth`, usuario);
    }
}
```

### :a: user.component.ts
```typescript=
import { Component, OnInit } from '@angular/core';
import { UsuarioService } from '../service/usuario.service';
import { Usuario } from '../model/usuario';
import { Router } from '@angular/router';

@Component({
  selector: 'app-user',
  template: `<div>
  <h1>Login</h1>
  <hr>

  <label>Email:</label><br>
  <input type='text' name='login' [(ngModel)]='usuario.login' id='login' 
  placeholder="Digite seu email"><br>
  
  <label>Senha:</label><br>
  <input type='password' name='password' [(ngModel)]='usuario.password' 
  id='password' placeholder="Digite sua senha"><br>
  <br>
  
  <button (click)='logar();'>Logar</button>

</div>`
})
export class UserComponent implements OnInit {

  usuario: Usuario;

  constructor(private service: UsuarioService, private router: Router) {
    this.usuario = new Usuario();
  }

  ngOnInit() {

  }

  public logar() {
    this.service.login(this.usuario).subscribe(res => {
      console.log('logado: ', res);
      localStorage.setItem('dados', JSON.stringify(this.usuario));
      this.router.navigateByUrl('/adm');
    }, error => {
      console.log('erro: ', error);
      localStorage.setItem('dados', 'error');
      this.router.navigateByUrl('/user');
    })
  }
}
```

### :a: usuario.module.ts
```typescript=
import { UsuarioService } from './../service/usuario.service';
import { NgModule, ModuleWithProviders } from '@angular/core';
import { CommonModule } from '@angular/common';
import { UserComponent } from '../user/user.component';
import { FormsModule } from '@angular/forms';


@NgModule({
	imports: [
		CommonModule,
		FormsModule
	],
	declarations: [UserComponent],
	exports: [UserComponent]
})
export class UsuarioModule {
	static forRoot(): ModuleWithProviders {
		return {
			ngModule: UsuarioModule,
			providers: [UsuarioService]
		}
	}
}
```

### :a: app.module.ts
```typescript=
import { UsuarioService } from './service/usuario.service';
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { HttpClientModule } from '@angular/common/http';
import { FormsModule } from '@angular/forms';
import { UsuarioModule } from './usuario/usuario.module';

@NgModule({
	declarations: [
		AppComponent,
	],
	imports: [
		BrowserModule,
		HttpClientModule,
		FormsModule,
		UsuarioModule.forRoot()
	],
	providers: [],
	bootstrap: [AppComponent]
})
export class AppModule { }

```












:::info
> [color=blue] [name=Coti Informática - https://www.cotiinformatica.com.br] 
> 

> [color=green] [name=Coti EAD - https://www.cotiead.com.br] 

:::

###### tags: `angular` `ter-qui` `noite` `10-03-2020`