frontendbr / forum

:beer: Portando discussões feitas em grupos (Facebook, Google Groups, Slack, Disqus) para o GitHub Discussions
MIT License
4.25k stars 234 forks source link

NodeJS - Sessions #460

Closed Adejair closed 4 years ago

Adejair commented 7 years ago

Olá, tudo bem ?

Pessoal, estou com uma dúvida, nunca trabalhei com sessões, estou desenvolvimento um sistema de autenticação, estou querendo que o usuário possa ficar logado por algum tempo no sistema, mesmo fechando o browser.

Achei um plugin no NodeJS que pode me ajudar nisto, mais estou com muitas dúvidas em relação a isso, como por exemplo, como fazer que o usuário faça o login ao entrar no site?

Eu pensei na seguinte alternativa, durante o processo de login, que é feito em uma API-Restfull, eu salvar os dados no plugin de sessions. Aí que vem minha dúvida, como vou saber se ele acessou meu site?

app.get('*',()=>) {}

Eu pensei nisto, mais o meu site fica em uma porta e o servidor fica em outra, como faço essas verificações?

Se alguém poder me dar uma luz, um meio de escape, eu agradeço muito, obrigado desde já :)

wbruno commented 7 years ago

"site fica em uma porta e o servidor fica em outra"? como assim? site fica na 80 e o node na 3000 ? você tem algum proxy reverso ?

quanto a sessão, é "só isso ai mesmo", nada de mais. Quando o usuário fizer login, você grava um request.session.logged = true, e se ele não tiver, você manda ele pra página de login, com um middleware para verificar.

não é legal essa idéia do '*' não. Use middlewares.

Adejair commented 7 years ago

@wbruno, primeiramente, obrigado pela ajuda :)

Sim, o site fica na 80 e o node 3000, não tenho nenhum proxy reverso.

Para eu poder usar um middleware ele deveria estar na mesma porta, não?

app.use('/rota/..', () => {
// ...
})

Ele precisaria estar na mesma porta, e até o momento eu estou trabalhando full localhost, não? Alguma dica de como solucionar?`

wbruno commented 7 years ago

não, porta não tem nada a ver com middleware. middleware é isso aqui:

app.get(middleware1, middleware2, function(request, response) {
  response.send('')
})

ou:

app.use(middleware);
app.get(function(request, response) {
  response.send('')
})
Adejair commented 7 years ago

Muito obrigado @wbruno :)

suissa commented 7 years ago

@wbruno porém nos os exemplos não são iguais.

app.get(middleware1, middleware2, function(request, response) {
  response.send('')
})

A função get precisa receber como primeiro parâmetro uma String, mas blz o conceito geral entendeu. Nesse caso o middleware sera executado apenas nessa função.

Agora em no segundo exemplo:

app.use(middleware);
app.get(function(request, response) {
  response.send('')
})

Caso esteja no app.js o middleware sera executado SEMPRE para cada request, se não me engano. Corrija-me se estiver errado, por favor,

wbruno commented 7 years ago

sim, o middleware será executado sempre para todos os requests, se usar o use direto no app.js o ideal é que ele use o Router e não declare endpoints no app.js, mas não quis fugir do foco da pergunta 👻

felipefialho commented 7 years ago

Resolveu @Adejair ?

Adejair commented 7 years ago

Sim, deu certo @LFeh .

Obrigado pela a ajuda de todos <3

RatoX commented 7 years ago

@adejair acabei de fazer essa semana um sistema de autenticação usando JWT e salvando o token no localstorage do browser eu adorei o resultado se quiser posso te mostrar como eu fiz.

mikejavier commented 7 years ago

@RatoX compartilha o código, para a gente ver !

Adejair commented 7 years ago

Opaaa, @RatoX, toda ajuda é bem vinda :)