Saznajte kako postupati s provjerom autentičnosti pomoću Node pomoću Passport.js

Podržite me čitajući ga iz izvornog izvora: IZVORNI IZVOR

U ovom ćete članku naučiti kako se obrađuje provjera autentičnosti vašeg Node poslužitelja pomoću Passport.js. Ovaj članak ne obuhvaća Frontend provjeru autentičnosti. Koristite ovo za konfiguriranje provjere autentičnosti na pozadini (generirajte token za svakog korisnika i zaštitite rute).

Imajte na umu da ako zapnete na bilo kojem koraku, možete se pozvati na ovaj GitHubov repo .

U ovom članku naučit ću vas sljedećem:

  • Rukovanje zaštićenim rutama
  • Rukovanje JWT tokenima
  • Rukovanje neovlaštenim odgovorima
  • Stvaranje osnovnog API-ja
  • Izrada modela i shema

Uvod

Što je Passport.js?

Passport je posrednički softver za provjeru identiteta za Node.js. Budući da je izuzetno fleksibilan i modularan, Passport se može neupadljivo ubaciti u bilo koju web-aplikaciju zasnovanu na Expressu. Sveobuhvatan skup strategija podržava provjeru autentičnosti pomoću korisničkog imena i lozinke, Facebooka, Twittera i mnogih drugih. Ovdje saznajte više o putovnici.

Vodič

Stvaranje našeg poslužitelja čvorova od nule

Stvorite novi direktorij s ovim "app.js"datoteka unutar:

Instalirat ćemo nodemon za lakši razvoj.

a zatim ćemo s njim pokrenuti našu "app.js".

$ nodemon app.js

Izrada korisničkog modela

Stvorite novu mapu nazvanu "modeli",i stvorite datoteku "Users.js" unutar te mape.Tu ćemo definirati našu „Korisničku shemu“. Koristit ćemo JWTi Cryptogenerirati hashi saltiz primljenog passwordniza. To će se kasnije koristiti za provjeru valjanosti korisnika.

Dodajmo naš novostvoreni model u "app.js".

Nakon konfiguriranja dodajte sljedeći redak u datoteku "app.js" Mongoose:

require('./models/Users');

Konfigurirajte putovnicu

Stvorite novu mapu "config" s datotekom "паспорт.js" u sebi:

U ovoj datoteci koristimo metodu validatePasswordkoju smo definirali uUser model. Na temelju rezultata vraćamo drugačiji izlaz od Passport-a LocalStrategy.

Priključimo "паспорт.js" u našu datoteku "app.js". Ispod svega dodajte sljedeći redak models:

require('./config/passport');

Rute i mogućnosti provjere autentičnosti

Stvorite novu mapu pod nazivom "routes" s datotekom "auth.js" unutar nje.

U ovoj datoteci koristimo funkciju getTokenFromHeadersza dobivanje JWT tokena koji će se poslati s klijentske strane u zaglavlja zahtjeva . Također stvaramo authobjekt sa optionali requiredsvojstvima. Kasnije ćemo ih koristiti u našim rutama.

U istoj mapi "routes" izradite datoteku "index.js":

Sada nam je potrebna mapa "api" unutar mape "routes", s drugom datotekom "index.js".

Sada, kreirajmo datoteku "users.js" koja nam je potrebna u "api / index.js".

Prvo ćemo stvoriti opcionalnu autorizacijsku rutu ‘/’koja će se koristiti za stvaranje novog modela (registar).

router.post('/', auth.optional, (req, res, next) ...

Nakon toga stvorit ćemo još jednu opcionalnu autorizacijsku rutu ‘/login’. Ovo će se koristiti za aktiviranje konfiguracije putovnice i potvrdu primljene lozinke e-poštom.

router.post('/login', auth.optional, (req, res, next) ...

Na kraju, stvorit ćemo potrebnu autorizacijsku rutu koja će se koristiti za vraćanje trenutno prijavljenog korisnika. Pristup ovoj ruti imaju samo prijavljeni korisnici (korisnici kojima je token uspješno poslan kroz zaglavlja zahtjeva).

router.get('/current', auth.required, (req, res, next) ...

Dodajmo našu mapu "routes" u "app.js".Dodajte sljedeći redak ispod naše putovnicerequire :

app.use(require('./routes'));

Ispitivanje rute

Koristit ću poštaraza slanje zahtjeva na naš poslužitelj.

Naš poslužitelj prihvaća sljedeće tijelo:

{ "user": { "email": String, "password": String } }

Izrada POST zahtjeva za stvaranje korisnika

Ispitno tijelo:

Odgovor:

{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgxNTEsImlhdCI6MTUyNzcyNDE1MX0.4TWc1TzY6zToHx_O1Dl2I9Hf9krFTqPkNLHI5U9rn8c" } }

Sada ćemo upotrijebiti ovaj token i dodati ga u naša "Zaglavlja" u poštarskoj konfiguraciji.

And now let’s test our auth only route.

Creating a GET request to return the currently logged in user

Request URL:

GET //localhost:8000/api/users/current

Response:

{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgzMTgsImlhdCI6MTUyNzcyNDMxOH0.5UnA2mpS-_puPwwxZEb4VxRGFHX6qJ_Fn3pytgGaJT0" } }

Let’s try to do it without token in “Headers”.

Response:

The end

Thank you for going through this tutorial. If you notice any errors please report them to me. If you got stuck on any step, please refer to this GitHub repo.

You can contact me through:

  • erdeljac DOT antonio AT gmail.com
  • Linkedin

Check out my app SwipeFeed.