Научете как да боравите с удостоверяването с Node с помощта на Passport.js

Подкрепете ме, като го прочетете от оригиналния му източник: ОРИГИНАЛЕН ИЗТОЧНИК

В тази статия ще научите как да обработвате удостоверяването за вашия сървър на Node с помощта на Passport.js. Тази статия не обхваща Frontend удостоверяване. Използвайте това, за да конфигурирате вашето удостоверяване на Backend (Генериране на маркер за всеки потребител и защита на маршрути).

Имайте предвид, че ако се забиете на която и да е стъпка, можете да се обърнете към това репо GitHub .

В тази статия ще ви науча на следното:

  • Работа със защитени маршрути
  • Работа с JWT токени
  • Обработка на неоторизирани отговори
  • Създаване на основен API
  • Създаване на модели и схеми

Въведение

Какво е Passport.js?

Passport е междинен софтуер за удостоверяване за Node.js. Тъй като е изключително гъвкав и модулен, Passport може да бъде ненатрапчиво пуснат във всяко базирано на Express уеб приложение. Изчерпателен набор от стратегии поддържа удостоверяване чрез потребителско име и парола, Facebook, Twitter и др. Научете повече за Passport тук.

Урок

Създаване на нашия сървърен възел от нулата

Създайте нова директория с този “app.js”файл вътре:

Ще инсталираме nodemon за по-лесно развитие.

и след това ще стартираме „app.js“ с него.

$ nodemon app.js

Създаване на потребителски модел

Създайте нова папка, наречена „модели“,и създайте файла „Users.js“ в тази папка.Тук ще дефинираме нашата „Потребителска схема”. Ще използваме JWTи Cryptoще генерираме hashи saltот получения passwordниз. По-късно това ще се използва за валидиране на потребителя.

Нека добавим нашия новосъздаден модел към “app.js”.

Добавете следния ред във вашия файл „app.js“ след конфигуриране Mongoose:

require('./models/Users');

Конфигурирайте паспорта

Създайте нова папка „config“ с файла „паспорт.js“ вътре:

В този файл използваме метода validatePassword, дефиниран вUser model. Въз основа на резултата връщаме различен изход от паспорта LocalStrategy.

Нека да свържем „паспорт.js“ с нашия файл „app.js“. Добавете следния ред под всичкиmodels :

require('./config/passport');

Маршрути и опции за удостоверяване

Създайте нова папка, наречена „маршрути“ с файла „auth.js“ вътре в нея.

В този файл използваме функцията, за getTokenFromHeadersда получим JWT маркер, който ще бъде изпратен от клиентската страна в заглавките на заявката . Също така създаваме authобект със optionalи requiredсвойства. Ще ги използваме по-късно в нашите маршрути.

В същата папка „маршрути“ създайте файл „index.js“:

Сега се нуждаем от папка „api“ вътре в папката „маршрути“, с друг файл „index.js“ вътре.

Сега нека създадем файла “users.js”, който ни е необходим в “api / index.js”.

Първо, ще създадем незадължителен автентичен маршрут, ‘/’който ще се използва за създаване на нов модел (регистър).

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

След това ще създадем друг незадължителен маршрут за удостоверяване‘/login’ . Това ще се използва за активиране на конфигурацията на паспорта ни и потвърждаване на получена парола с имейл.

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

И накрая, ще създадем необходим маршрут за удостоверяване , който ще се използва за връщане на влезлия в момента потребител. Достъп до този маршрут имат само влезли потребители (потребители, чийто маркер е изпратен успешно чрез заглавките на заявката).

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

Нека добавим нашата папка „маршрути“ към „app.js“.Добавете следния ред под нашия паспортrequire :

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

Тестване на маршрута

Ще използвам пощальонза изпращане на заявки до нашия сървър.

Нашият сървър приема следното тяло:

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

Създаване на POST заявка за създаване на потребител

Тестово тяло:

Отговор:

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

Сега ще използваме този знак и ще го добавим към нашите „Headers“ в конфигурацията на Postman.

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.