Oi, tudo bem?
Sua preocupação em relação ao uso do decorator @Injectable com a propriedade providedIn definida como 'root' é válida. Vamos explorar essa questão e discutir as melhores práticas para garantir a segurança em um serviço de autenticação.
O decorator @Injectable é utilizado em classes que possuem dependências injetáveis no Angular. Ao definir a propriedade providedIn como 'root', a classe é registrada no injetor raiz do Angular, tornando-a disponível em todo o projeto. Essa abordagem é conveniente para serviços que precisam ser compartilhados por vários componentes, pois evita a necessidade de declará-los manualmente em módulos ou componentes específicos.
No entanto, em casos específicos, como um serviço de autenticação, é compreensível que você queira restringir o escopo da classe para um componente ou módulo específico, a fim de garantir a segurança e o controle adequados. Felizmente, o Angular oferece opções para isso.
Uma abordagem para restringir a visibilidade do serviço de autenticação apenas ao componente de login é utilizar a propriedade providedIn com o valor do próprio componente em vez de 'root'. Vamos ver um exemplo prático:
import { Injectable } from '@angular/core';
@Injectable({
providedIn: LoginComponent
})
export class AuthService {
// Implementação do serviço de autenticação
}
No exemplo acima, definimos o valor de providedIn como LoginComponent, que é o nome do componente de login. Dessa forma, o serviço AuthService estará disponível apenas para o componente LoginComponent e seus filhos. Outros componentes não terão acesso a ele.
Além disso, é necessário garantir que o módulo que contém o LoginComponent esteja importando e fornecendo o serviço AuthService corretamente. Isso pode ser feito no módulo do componente de login da seguinte maneira:
import { NgModule } from '@angular/core';
import { LoginComponent } from './login.component';
import { AuthService } from './auth.service';
@NgModule({
declarations: [LoginComponent],
providers: [AuthService]
})
export class LoginModule { }
Dessa forma, o módulo do LoginComponent será responsável por fornecer o AuthService, tornando-o disponível para o próprio componente e seus filhos.
Ao restringir a visibilidade do serviço de autenticação dessa maneira, você está seguindo uma abordagem mais segura e controlada, limitando o acesso ao serviço apenas ao componente necessário. Isso pode ser especialmente útil em cenários em que você deseja garantir que somente o componente de login tenha acesso às informações de autenticação, mantendo outros componentes separados e protegidos.
É importante ressaltar que essa é apenas uma abordagem para lidar com a visibilidade de serviços no Angular, e outras estratégias podem ser aplicadas dependendo das necessidades do seu projeto.
Espero que tenha te ajudado, bons estudos!
O post foi fechado pois o curso foi descontinuado e não faz mais parte da grade oficial