• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z logowaniem, Passport.js

Object Storage Arubacloud
0 głosów
178 wizyt
pytanie zadane 12 sierpnia 2020 w JavaScript przez Darth_Sith Początkujący (310 p.)
edycja 13 sierpnia 2020 przez Darth_Sith

 

const express = require('express');
const mongoose = require('mongoose')
const app = require('../app');
const passport = require('passport');
const User = require('../models/Users')
const bcrypt = require('bcrypt')
const router = express.Router();


/* GET home page. */
router.get('/', checkAuth, (req, res) => {
  res.redirect('dashboard', {
    name: req.body.name
  });
});

/* Login page GET */
router.get('/login', checkNotAuth, (req, res) => {
  res.render('login')
})

/* Login page POST */
router.post('/login', checkNotAuth, passport.authenticate('local', {
  successRedirect: '/',
  failureRedirect: '/login',
  failureFlash: true
}))

/* Registration page GET */
router.get('/register', checkNotAuth, (req, res) => {
  res.render('register')
})

/* Registration page */
router.post('/register', async (req, res) => {
  try {
    const hashedPassword = await bcrypt.hash(req.body.password, 10);
    let user = new User({
      name: req.body.name,
      email: req.body.email,
      password: hashedPassword
    })

    user.save(user);

    res.redirect('/login')
  } catch (err) {
    res.redirect('/register')
  }
})

router.delete('/logout', (req, res) => {
  req.logOut();
  res.redirect('/login')
})

function checkAuth(req, res, next, e) {
  if (req.isAuthenticated()) {
    console.log(e)
    return next();
  }

  return res.redirect('/login')
}

function checkNotAuth(req, res, next) {
  if (req.isAuthenticated()) {
    return res.redirect('/');
  }

  return next();
}

module.exports = router;

Witam, to znowu ja i teraz mam pytanko takie czemu nie mogę się zalogować ?

Rejestracja już działa tylko nie wiem czemu mnie "odbija" po zalogowaniu :/

1
komentarz 12 sierpnia 2020 przez Paweł Nąckiewicz Nałogowiec (48,990 p.)
a co node na to krzyczy?
1
komentarz 12 sierpnia 2020 przez Comandeer Guru (601,590 p.)

@Darth_Sith, proszę się stosować do regulaminu i nadawać bardziej opisowe tematy postom.

1 odpowiedź

0 głosów
odpowiedź 12 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 15 sierpnia 2020 przez Darth_Sith
 
Najlepsza

http://www.passportjs.org/docs/downloads/html/#redirects

https://expressjs.com/en/guide/routing.html#route-handlers

Dla route "/login" przekazujesz metodę passport.authenticate, która w razie sukcesu przekieruje na route "/", a w przypadku niepowodzenia na "/login".

Nie napisałeś dokąd przekierowuje Cię po zalogowaniu, ale zakładam, że na "/" (bo w przeciwnym razie raczej byś napisał o zapętlaniu route'ów "/login"), który z kolei najpierw sprawdza, czy jesteś uwierzytelniony - jeśli tak to przekieruje Cię do "/dashboard", a jeśli nie to wraca do "/login".

Dokąd chcesz, żeby przekierowało użytkownika po zalogowaniu?

P.S. Na przyszłość proszę abyś w tytule tematu napisał zwięźle na czym polega problem, bo już kolejny raz jest tylko informacja, że problem dotyczy Node - ale nie ma wzmianki o tym jaki to problem.

https://forum.pasja-informatyki.pl/faq#na-co-zwrocic-uwage-zadajac-pytanie

https://forum.pasja-informatyki.pl/regulamin-forum#II2b

komentarz 12 sierpnia 2020 przez Darth_Sith Początkujący (310 p.)

A przy podaniu username i hasła muszę podawać maila czy to nie ma znaczenia ?

Nie napisałeś dokąd przekierowuje Cię po zalogowaniu, ale zakładam, że na "/" (bo w przeciwnym razie raczej byś napisał o zapętlaniu route'ów "/login"), który z kolei najpierw sprawdza, czy jesteś uwierzytelniony - jeśli tak to przekieruje Cię do "/dashboard", a jeśli nie to wraca do "/login".

Chcę właśnie żeby przekierowywało do dashboard'u ale ciągle mnie odbija, i teraz nie wiem czy gdzieś to ustawić czy co dalej. 

komentarz 12 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

A przy podaniu username i hasła muszę podawać maila czy to nie ma znaczenia ?

Gdzie, w aplikacji, czy w kodzie?

Chcę właśnie żeby przekierowywało do dashboard'u ale ciągle mnie odbija, i teraz nie wiem czy gdzieś to ustawić czy co dalej. 

Nie odpowiedziałeś na pytanie z komentarza, czy są jakieś błędy w konsoli? I dokąd ciągle Cię odbija? Jeśli do "/login", to dlatego, że taki route podałeś w property failureRedirect. Możliwe więc, że uwierzytelnienie jest odrzucane.

Możesz użyć sposobu z customowym callbackiem, żeby dowiedzieć się, czy jest problem z uwierzytelnieniem - w zmiennej err powinien wtedy być powód odrzucenia.

P.S. Nadal nie poprawiłeś tematu zgodnie z moją i Comandeera prośbą.

komentarz 13 sierpnia 2020 przez Darth_Sith Początkujący (310 p.)

 

Gdzie, w aplikacji, czy w kodzie?

W aplikacji ciągle odbija mnie od zalogowania a jak robię customowego callback'a to tylko "mieli" stronę.

Nie odpowiedziałeś na pytanie z komentarza, czy są jakieś błędy w konsoli?

login:1 [DOM] Input elements should have autocomplete attributes (suggested: "current-password"): (More info: https://goo.gl/9p2vKq) <input type=​"password" id=​"password" name=​"password" required>​

komentarz 13 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

W aplikacji ciągle odbija mnie od zalogowania

A dokąd konkretnie Cię odbija?

 a jak robię customowego callback'a to tylko "mieli" stronę.

Czy wypisujesz do konsoli parametr err z tego customowego callbacka? Czy pokazuje się coś w konsoli Node-a?

login:1 [DOM] Input elements should have autocomplete attributes (...)

Ten komunikat jest wypisany żółtym kolorem czy czerwonym? To pewnie raczej ostrzeżenie niż błąd.

komentarz 13 sierpnia 2020 przez Darth_Sith Początkujący (310 p.)

A dokąd konkretnie Cię odbija?

No właśnie nigdzie, ciągle mieli mi stronę :/

 Czy wypisujesz do konsoli parametr err z tego customowego callbacka? Czy pokazuje się coś w konsoli Node-a?

 Tak ale wyświetla w konsoli node'a status 200 - chociaż tutaj nie jestem pewien bo nie wiem czemu ale w konsoli node'a nie mam że POST coś wysyła tylko wszystko idzie przez 'GET'.

komentarz 13 sierpnia 2020 przez ScriptyChris Mędrzec (190,190 p.)

Hmm, trudno mi powiedzieć dlaczego tak się dzieje, bo nie znam biblioteki passport.js - musiałbym się wczytać w dokumentację i debugować kod.

Dodaj więcej console.log-ów (na przykładzie poniższego kodu) i pokaż screen z konsoli Node-a (zakryj ewentualne poufne dane):

app.get('/login', function(req, res, next) {
  console.log('Login route...');

  const authCb = passport.authenticate('local', function(err, user, info) {
    console.log('local auth /err:', err, ' /user:', user, ' /info: ', info);

    if (err) { return next(err); }
    if (!user) { return res.redirect('/login'); }
    req.logIn(user, function(err) {
      console.log('logIn /err:', err);

      if (err) { return next(err); }
      return res.redirect('/users/' + user.username);
    });
  });

  console.log('authCb:', authCb);

  authCb(req, res, next);
});

 

komentarz 13 sierpnia 2020 przez Darth_Sith Początkujący (310 p.)
A z czego Ty korzystasz jeśli można wiedzieć ? Może są jakieś lepsze biblioteki od tego passport.js ?

Podobne pytania

0 głosów
2 odpowiedzi 331 wizyt
pytanie zadane 29 marca 2022 w JavaScript przez KubaLaska Początkujący (350 p.)
+2 głosów
2 odpowiedzi 279 wizyt
0 głosów
1 odpowiedź 162 wizyt
pytanie zadane 18 października 2020 w JavaScript przez dkrakowski Nowicjusz (140 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...