Que conteúdo top, maratonei os vídeos como uma série da netflix hehe não consegui parar, a tempos não encontro um conteúdo com essa qualidade!!! Show parabéns
Caramba q dinâmica top. Direto ao ponto explicando sem enrolação nem fazendo parecer algo mais complexo do que é de verdade, já até animei aqui e fiz um nest new aqui pra ir acompanhando 🎉 #gratidaoporfazeralgobom
que isso, ajudou d+, eu usava mais node nativo, ai comecei a usar nestjs esses dias, e estava com dificuldade de fazer a autenticação dessa forma com passport, vlw
Por que não usar o bcrypt.hash()? Outra questão.. O fato do salt estar facilmente identificado no hash gerado (concatenado com ".") não facilita o ataque? Parabéns pelo conteúdo. O timing é sensacional, sem muita enrolação. Nem preciso aumentar a velocidade do vídeo haha
Fala aí Marco, boas perguntas! Pode (deve) usar o bcrypt numa boa; é o que todo mundo usa, é super seguro, então faz todo sentido. É que, como o canal tem uma pegada educacional, eu acho legal mostrar alternativas e, nesse caso, mostrar como um processo de hash funciona. Mas eu vou cuidar pra deixar isso mais claro em próximas oportunidades. Agora, quanto à segurança dessa abordagem de armazenar o salt e o hash, é seguro sim. É uma prática comum e bem aceita, e não expõe o sistema a ataques desde que algumas boas práticas sejam seguidas: 1) Usar um hash forte, como os criados pelo bcrypt e scrypt, que são algoritmos computacionalmente intensos, que dificultam ataques de força bruta. 2) Usar um salt suficientemente longo, tipo 16 bytes, que dificulta pre-computar os possíveis salts pra iniciar o ataque. 3) Salt único pra cada password, que torna extremamente difícil o uso de uma rainbow table pra iniciar o ataque. E claro, 4) restringir o acesso à base, implementar monitoramento, ferramentas de firewall, etc. Espero ter respondido, mas se restou alguma dúvida ou consideração, avise aí que conversamos ✌️
Fala Rafael, blz? Dá tipar sim, e tipar as coisas é sempre melhor que deixar como any, nem que seja apenas com type ou interface, pelo menos pra deixar claras quais sãs as expectativas do método. Pra esse caso específico, você poderia criar a classe sendo algo como... ``` import { IsString, IsNumber } from 'class-validator'; export class JwtPayload { @IsNumber() sub: number; @IsString() username: string; } ``` E mudar a implementação desse método para: ``` async validate(payload: any): Promise { const jwtPayload = plainToInstance(JwtPayload, payload); await validateOrReject(jwtPayload); return jwtPayload; } ``` Esse tipo de questionamento é sempre válido, tá... é que, nos vídeos, eu tenho que cortar uns caminhos pra não ficar muito grande. Então eu foco na questão central do vídeo e meio que atropelo o resto, se não o vídeo fica com 20-30 min e cara... pelas ferramentas aqui do TH-cam, vou te falar: a galera não assiste, não tem jeito 😅
@@PhillCode é eu imaginei que seria algo do tipo mesmo, surgiu a dúvida pq no outro vídeo vc acrescentou outra propriedade dai eu pensei será que ele fez de propósito ou é comum deixar assim. Muito obrigado por responder e parabéns pelo conteúdo!
@@rafa_veiga tmj, e obrigado por perguntar :) pode mandar, que eu uso essas perguntas pra pensar e repensar minha abordagem nos vídeos, além de as vezes virem ideias pra novos conteúdos. Sucesso ae!
@Phiilcode se porventura estiver usando o fastify essa biblioteca passport também vai funcionar, caso a resposta seja não funciona, você poderia me dar uma dica para aplicar no projeto com o fastify. Vlw 👍
Fala André Luis, desculpe a demora! Se ainda for útil, é possível usar o passport com o Fastify sim, usando um pacote pra fazer a compatibilidade. Adicione o @fastify/passport pra começar. No bootstrap da aplicação, você vai registrar o uso dessa lib, mais ou menos assim: app.register(fastifySecureSession, { secret: 'SECRET DO SEU ENV', cookie: { secure: false }, // true em produção }); app.register(fastifyPassport.initialize()); app.register(fastifyPassport.secureSession()); De resto, é pra ser a mesma coisa. Espero ter ajudado!
Sensacional oh
Tamo junto! ✊
O melhor no assunto de Nest
Opaaa, valeu demais!
faz um vídeo ensinando a usar a autenticação do google com passport, dando continuidade a esse vídeo
Top demais seus conteúdos
Obrigado, Rafael! Sempre bom pra saber se tô fazendo o conteúdo certo pra vcs, valeu
👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻👏🏻
Valeeeeu!
Rapaz... o cara ensina rápido demais, tive que correr para fazer logo a minha inscrição antes da aula acabar.
😅 O pessoal pede vídeo curto, a gente faz 🤷 hehe
O MELHOR CONTEÚDO TOP SOBRE NESTJS
Valeu André Luis! 👊
essa notificação do slack no meio do vídeo me baitou kkkk
kkk total, até eu me bugo com essa notificação! Depois disso eu desliguei o som das notificações ;)
Que conteúdo top, maratonei os vídeos como uma série da netflix hehe não consegui parar, a tempos não encontro um conteúdo com essa qualidade!!! Show parabéns
Bora fazer o Netphillx, haha Que bom que está curtindo os vídeos, valeu!
Excelente! A série de vídeos sobre NestJS está muito boa; estou acompanhando todos.🚀
Valeu Wesley, bora continuar que ainda tem muito assunto de NestJS pra cobrir!
Caramba q dinâmica top. Direto ao ponto explicando sem enrolação nem fazendo parecer algo mais complexo do que é de verdade, já até animei aqui e fiz um nest new aqui pra ir acompanhando 🎉
#gratidaoporfazeralgobom
Opa, que legal ler/ouvir isso! Bora aprender juntos, obrigado pela força 👊
que isso, ajudou d+, eu usava mais node nativo, ai comecei a usar nestjs esses dias, e estava com dificuldade de fazer a autenticação dessa forma com passport, vlw
Que bom que te ajudou, Cezar!
Por que não usar o bcrypt.hash()? Outra questão.. O fato do salt estar facilmente identificado no hash gerado (concatenado com ".") não facilita o ataque? Parabéns pelo conteúdo. O timing é sensacional, sem muita enrolação. Nem preciso aumentar a velocidade do vídeo haha
Fala aí Marco, boas perguntas! Pode (deve) usar o bcrypt numa boa; é o que todo mundo usa, é super seguro, então faz todo sentido. É que, como o canal tem uma pegada educacional, eu acho legal mostrar alternativas e, nesse caso, mostrar como um processo de hash funciona. Mas eu vou cuidar pra deixar isso mais claro em próximas oportunidades.
Agora, quanto à segurança dessa abordagem de armazenar o salt e o hash, é seguro sim. É uma prática comum e bem aceita, e não expõe o sistema a ataques desde que algumas boas práticas sejam seguidas: 1) Usar um hash forte, como os criados pelo bcrypt e scrypt, que são algoritmos computacionalmente intensos, que dificultam ataques de força bruta. 2) Usar um salt suficientemente longo, tipo 16 bytes, que dificulta pre-computar os possíveis salts pra iniciar o ataque. 3) Salt único pra cada password, que torna extremamente difícil o uso de uma rainbow table pra iniciar o ataque. E claro, 4) restringir o acesso à base, implementar monitoramento, ferramentas de firewall, etc.
Espero ter respondido, mas se restou alguma dúvida ou consideração, avise aí que conversamos ✌️
No 5:30 no método validate(payload:any) data pra tipar fazendo uma validação com o class-validator ou deixar o any ali é mais indicado?
Fala Rafael, blz?
Dá tipar sim, e tipar as coisas é sempre melhor que deixar como any, nem que seja apenas com type ou interface, pelo menos pra deixar claras quais sãs as expectativas do método.
Pra esse caso específico, você poderia criar a classe sendo algo como...
```
import { IsString, IsNumber } from 'class-validator';
export class JwtPayload {
@IsNumber()
sub: number;
@IsString()
username: string;
}
```
E mudar a implementação desse método para:
```
async validate(payload: any): Promise {
const jwtPayload = plainToInstance(JwtPayload, payload);
await validateOrReject(jwtPayload);
return jwtPayload;
}
```
Esse tipo de questionamento é sempre válido, tá... é que, nos vídeos, eu tenho que cortar uns caminhos pra não ficar muito grande. Então eu foco na questão central do vídeo e meio que atropelo o resto, se não o vídeo fica com 20-30 min e cara... pelas ferramentas aqui do TH-cam, vou te falar: a galera não assiste, não tem jeito 😅
@@PhillCode é eu imaginei que seria algo do tipo mesmo, surgiu a dúvida pq no outro vídeo vc acrescentou outra propriedade dai eu pensei será que ele fez de propósito ou é comum deixar assim. Muito obrigado por responder e parabéns pelo conteúdo!
@@rafa_veiga tmj, e obrigado por perguntar :) pode mandar, que eu uso essas perguntas pra pensar e repensar minha abordagem nos vídeos, além de as vezes virem ideias pra novos conteúdos. Sucesso ae!
@Phiilcode se porventura estiver usando o fastify essa biblioteca passport também vai funcionar, caso a resposta seja não funciona, você poderia me dar uma dica para aplicar no projeto com o fastify. Vlw 👍
Fala André Luis, desculpe a demora! Se ainda for útil, é possível usar o passport com o Fastify sim, usando um pacote pra fazer a compatibilidade.
Adicione o @fastify/passport pra começar. No bootstrap da aplicação, você vai registrar o uso dessa lib, mais ou menos assim:
app.register(fastifySecureSession, {
secret: 'SECRET DO SEU ENV',
cookie: { secure: false }, // true em produção
});
app.register(fastifyPassport.initialize());
app.register(fastifyPassport.secureSession());
De resto, é pra ser a mesma coisa. Espero ter ajudado!