Lær hvordan du håndterer godkendelse med Node ved hjælp af Passport.js

Støt mig ved at læse den fra dens oprindelige kilde: ORIGINAL SOURCE

I denne artikel lærer du, hvordan du håndterer godkendelse af din Node-server ved hjælp af Passport.js. Denne artikel dækker ikke Frontend-godkendelse. Brug dette til at konfigurere din Backend-godkendelse (Generer token for hver bruger og beskyt ruter).

Husk, at hvis du sidder fast på et hvilket som helst trin, kan du henvise til denne GitHub repo .

I denne artikel vil jeg lære dig følgende:

  • Håndtering af beskyttede ruter
  • Håndtering af JWT-tokens
  • Håndtering af uautoriserede svar
  • Oprettelse af en grundlæggende API
  • Oprettelse af modeller og skemaer

Introduktion

Hvad er Passport.js?

Passport er godkendelsesmellemware til Node.js. Da det er ekstremt fleksibelt og modulært, kan Passport diskret nedlægges i enhver Express-baseret webapplikation. Et omfattende sæt strategier understøtter godkendelse ved hjælp af et brugernavn og en adgangskode, Facebook, Twitter og mere. Find ud af mere om pas her.

Vejledning

Opretter vores node-server fra bunden

Opret en ny mappe med denne “app.js”fil inde:

Vi installerer nodemon for lettere udvikling.

og så kører vi vores "app.js" med det.

$ nodemon app.js

Oprettelse af brugermodel

Opret en ny mappe kaldet "modeller",og opret "Users.js" -filen i den pågældende mappe.Det er her, vi definerer vores “UsersSchema”. Vi skal bruge JWTog Cryptogenerere hashog saltfra den modtagne passwordstreng. Dette vil senere blive brugt til at validere brugeren.

Lad os tilføje vores nyoprettede model til “app.js”.

Føj følgende linje til din "app.js" -fil efter konfiguration Mongoose:

require('./models/Users');

Konfigurer pas

Opret en ny mappe "config" med filen "passport.js" inde i den:

I denne fil bruger vi den metode, validatePasswordsom vi definerede iUser model. Baseret på resultatet returnerer vi en anden output end Passport LocalStrategy.

Lad os forbinde "passport.js" til vores "app.js" -fil. Tilføj følgende linje under allemodels :

require('./config/passport');

Ruter og godkendelsesmuligheder

Opret en ny mappe kaldet "ruter" med filen "auth.js" inde i den.

I denne fil bruger vi funktionen getTokenFromHeaderstil at få et JWT-token , der sendes fra klientsiden i anmodningens overskrifter . Vi opretter også et authobjekt med optionalog requiredegenskaber. Vi bruger dem senere på vores ruter.

I den samme "ruter" -mappe skal du oprette en "index.js" -fil:

Vi har nu brug for en "api" -mappe inde i "ruter" -mappen med en anden "index.js" -fil inde i den.

Lad os nu oprette den “users.js” -fil, som vi har brug for i “api / index.js”.

Først skal vi oprette en valgfri auth- rute, ‘/’der vil blive brugt til oprettelse af ny model (register).

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

Efter dette, vil vi skabe en anden valgfri auth rute ‘/login’. Dette bruges til at aktivere vores paskonfiguration og validere en modtaget adgangskode med e-mail.

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

Endelig opretter vi en krævet godkendelsesrute , som bruges til at returnere den aktuelt loggede bruger. Kun indloggede brugere (brugere, der har deres token sendt gennem anmodningens overskrifter) har adgang til denne rute.

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

Lad os tilføje vores "ruter" -mappe til "app.js".Tilføj følgende linje under vores pasrequire :

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

Rutetest

Jeg bruger Postmandat sende anmodninger til vores server.

Vores server accepterer følgende organ:

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

Oprettelse af en POST-anmodning om oprettelse af en bruger

Test organ:

Respons:

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

Vi bruger nu dette token og føjer det til vores “Headers” i Postmans konfiguration.

Og lad os nu teste vores eneste autorute.

Oprettelse af en GET-anmodning om returnering af den aktuelt loggede bruger

URL til anmodning:

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

Respons:

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

Lad os prøve at gøre det uden symbol i "Headers".

Respons:

Slutningen

Tak fordi du har gennemgået denne vejledning. Hvis du bemærker nogen fejl, bedes du rapportere dem til mig. Hvis du sidder fast på et hvilket som helst trin, se venligst denne GitHub repo.

Du kan kontakte mig via:

  • erdeljac DOT antonio AT gmail.com
  • Linkedin

Tjek min app SwipeFeed.