Agora que você já conhece o pacote Mingle e sua configuração inicial já está funcionando, vamos utilizar o Mingle MingleService para realizar a autenticação do usuário ao seu servidorbackend do cliente ( Protheus, Datasul, Logix, Smart).
Pré requisitos:
Considere o arquivo: login.component.ts
...
Bloco de código | ||||||
---|---|---|---|---|---|---|
| ||||||
import { MingleService } from '@totvs/mingle'; |
Na função login(), utilizamos o método mingleService.auth.login(usuário, senha, alias).
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
import { MingleService } from '@totvs/mingle';
export class LoginComponent implements OnInit {
constructor(private mingleService: MingleService) { }
ngOnInit(): void {}
login() {
this.mingleService.auth.login("login",
"password",
"alias")
.subscribe((dataLogin) => {
console.log("Login com sucesso - dados do login", dataLogin);
this.route.navigate(['home']);
}, (authError) => {
console.log(authError);
console.error('Falha na autenticação');
});
}
}
|
Observe que os valores "login" e "password" geralmente são preenchidos pelo usuário do aplicativo através de uma página de autenticação.
Após executar o Login no aplicativo, o retorno de sucesso será parecido com este:
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
{"access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9Mug...",
"muser":{"_id":"5ffda7bdaacb0685f34d59e2","login":"exemplo"},
"set":{"_id":"5fbe5712d8ccbf002cf443f3","alias":"TOTVS"},
"params_values":[{"_id":"5fbe5712d8ccbf002cf443f2","key":"EMPRESA","value":"123"}],
"client":{"_id":"5eeb67edeb62740029b1f03f","name":"TOTVS_TDN"},
"wso2":{},
"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoi...","
auth_driver":"protheus"} |
A chave access_token é armazenada no storage do navegador pelo mingleService para ser utilizada em outras etapas do aplicativo que requerem comprovação de autenticação, como por exemplo uma chamada de gateway. O access_token tem um prazo de validade de acordo com cada ambiente e requer uma nova autenticação quando expirar.
Quando se utiliza um access_token expirado, o Mingle retornará para o aplicativo o status 401 do protocolo HTTP.
O desenvolvedor pode seguir dois caminhos para obter um novo access_token:
1- Solicitar ao usuário do aplicativo um novo login.
2- Utilizar a chave refresh_token obtida no login inicial e realizar uma autenticação transparente para o usuário, sem que ele tenha que realizar login novamente.
Para obter os dados de autenticação atualizados, você pode utilizar o serviço Refresh Token do Mingle.
Considere o código de exemplo abaixo:
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
refreshToken(){
const bodyRefreshToken = this.mingleService.getBodyToRefreshTokenAPI();
const urlRefreshTOken = this.mingleService.getRefreshTokenURL();
this.http.post(urlRefreshTOken, bodyRefreshToken).subscribe(resultAuth => console.log(resultAuth))
} |
O MingleService prepara o body que deve ser enviado para o serviço Refresh Token através do método mingleService.getBodyToRefreshTokenAPI();
Logo após obter o body que deve ser enviado para o Mingle, obtenha a URL do serviço através do método mingleService.getRefreshTokenURL();
E para obter os novos dados de autenticação, realize um POST com os parâmetros encontrados anteriormente.
Para realizar o logout utilize o nosso método mingleService.auth.logout();
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
this.mingleService.auth.logout().subscribe(() => { console.log("Usuário deslogado"); this.route.navigate(['login']); }) |