Ако желите да заштитите осетљив садржај у вашој апликацији Ноде, потребан вам је начин за аутентификацију корисника. Међутим, изградња сопственог система за аутентификацију је сложена и дуготрајна, а ако се не уради како треба, може довести до сигурносних пропуста у вашој апликацији. Алати трећих страна као што је Пасспорт олакшавају аутентификацију.
У овом водичу ћете научити како да имплементирате аутентификацију у Ноде користећи Пасспорт и МонгоДБ.
Шта су аутентификација и ауторизација?
Док се аутентификација и ауторизација понекад користе наизменично, ова два безбедносна концепта имају различита значења. Аутентификација је процес провере да је корисник оно за кога тврде да јесте, док је ауторизација процес утврђивања да ли аутентификовани корисник има приступ одређеним деловима ваше апликације.
Шта је Пасспорт.јс?
Пасспорт.јс (или Пасош) је међуверзија за аутентификацију за НодеЈС која пружа више од 500 стратегија за аутентификацију корисника укључујући пасош-локални који користи корисничко име и лозинку.
Овај водич користи пасош-локални и пасош-јвт да обезбеде руте.
Како подесити аутентификацију корисника у НодеЈС-у
Сада знате нешто о аутентификацији корисника и Пасспорт.јс, можемо погледати како да подесите аутентификацију на НодеЈС. У наставку смо навели кораке које ћете морати да предузмете.
Корак 1: Подесите сервер чворова
Направите фасциклу под називом усер-аутх-нодејс и дођите до њега користећи свој терминал.
мкдир усер-аутх-нодејс.цд усер-аутх-нодејс
Следећа иницијализација пацкаге.јсон.
нпм инит
Пошто ћете користити изразити, позадински оквир НодеЈС, инсталирајте га тако што ћете покренути следећу команду.
нпм и екпресс
Сада креирајте датотеку, апп.јс, и додајте следећи код да бисте креирали сервер.
цонст екпресс = рекуире("екпресс");
цонст апп = екпресс();
цонст ПОРТ = 3000;
апп.листен (ПОРТ, () => {
цонсоле.лог(`Слушање на порту ${ПОРТ}`);
});
Повезан: Научите како да инсталирате Нпм и Ноде.јс на Убунту
Корак 2: Подесите базу података
Потребна вам је база података за чување корисничких података. Користићете монгоосе да креирате МонгоДБ шему података која дефинише структуру и тип података које ћете чувати у бази података. Пошто чувате корисничке податке, креирајте корисничку шему.
Инсталирајте мунгоосе.
нпм и мунгоосе
Креирајте нову датотеку, усерМодел.јс, и додајте следеће.
цонст мунгоосе = рекуире('мунгоосе')
цонст {Схема} = мунгос
цонст УсерСцхема = нова шема ({
емаил: {
тип: стринг,
потребно: тачно
},
Лозинка: {
тип: стринг,
потребно: тачно
}
})
цонст УсерМодел = монгоосе.модел('усер', УсерСцхема);
модуле.екпортс = УсерМодел;
Повезан: Како направити базу података и колекцију у МонгоДБ-у
Пре него што сачувате лозинку, морате је шифровати из безбедносних разлога. Користићете бцриптјс, веома користан нпм пакет који олакшава рад са шифрованим лозинкама.
Инсталирај бцриптјс.
нпм и бцриптјс
Модификовати усермодел.јс да шифрујете лозинку пре него што је сачувате у бази података.
цонст мунгоосе = рекуире('мунгоосе')
цонст бцрипт = рекуире('бцриптјс');
цонст {Схема} = мунгос
цонст УсерСцхема = нова шема ({
...
})
УсерСцхема.пре('саве', асинц фунцтион (нект) {
покушати {
// провера метода регистрације
цонст корисник = ово;
иф (!усер.исМодифиед('пассворд')) нект();
// генерише со
цонст салт = аваит бцрипт.генСалт (10);
// хеширати лозинку
цонст хассхедПассворд = аваит бцрипт.хасх (ова.пассворд, сол);
// замени шифру обичног текста хешираном лозинком
тхис.пассворд = хассхедПассворд;
следећи();
} ухватити (грешка) {
повратак следећи (грешка);
}
});
...
цонст Корисник = монгоосе.модел('Корисник', Корисничка шема);
Овде користите а пре сачувати закачите да бисте променили лозинку пре него што је сачувана. Идеја је да се сачува хеш верзија лозинке уместо лозинке за обичан текст. Хеш је дугачак сложен стринг генерисан из низа обичног текста.
Користите исМодифиед да проверите да ли се лозинка мења пошто је потребно само да хеширате нове лозинке. Затим генеришете со и проследите је са лозинком обичног текста хеш методи да бисте генерисали хеширану лозинку. На крају, замените шифру обичног текста хешираном лозинком у бази података.
Креирајте дб.јс и конфигуришите базу података.
цонст монгоосе = рекуире("мунгоосе");
Мунгос. Обећање = глобално. Промисе;
цонст дбУрл = "монгодб://лоцалхост/усер";
цонст цоннецт = асинц () => {
монгоосе.цоннецт (дбУрл, { усеНевУрлПарсер: труе, усеУнифиедТопологи: труе });
цонст дб = мунгоосе.цоннецтион;
дб.он("грешка", () => {
цонсоле.лог("не могу да се повежем");
});
дб.онце("отвори", () => {
цонсоле.лог("> Успешно повезан са базом података");
});
};
модуле.екпортс = { повезивање };
У апп.јс, повежите се са базом података.
// повезивање са дб
цонст дб = рекуире('./дб');
дб.цоннецт();
Корак 3: Подесите пасош
Инсталирај Пасош и пасош-локални. Користићете ове пакете за регистрацију и пријављивање корисника.
нпм и пасош
нпм и пасош-локални
Креирајте нову датотеку, пасспортЦонфиг.јс, и увоз пасош-локални анд тхе усерМодел.јс.
цонст ЛоцалСтрареги = рекуире("пасспорт-лоцал").Стратегија;
цонст Усер = рекуире("./усерМодел");
Конфигуришите Пасош да управља регистрацијом корисника.
цонст ЛоцалСтратеги = рекуире("пасспорт-лоцал");
цонст Усер = рекуире("./усерМодел");
модуле.екпортс = (пасош) => {
пасош.употреба(
"локално пријављивање",
нова локална стратегија(
{
корисничко имеФиелд: "емаил",
пассвордФиелд: "пассворд",
},
асинц (е-пошта, лозинка, готово) => {
покушати {
// проверава да ли корисник постоји
цонст усерЕкистс = аваит Усер.финдОне({ "е-пошта": емаил });
иф (усерЕкистс) {
враћање завршено (нулл, фалсе)
}
// Креирајте новог корисника са датим корисничким подацима
цонст усер = аваит Усер.цреате({ емаил, пассворд });
повратак урађен (нулл, корисник);
} ухватити (грешка) {
урађено (грешка);
}
}
)
);
}
У горњем коду проверавате да ли је е-пошта већ у употреби. Ако имејл не постоји, региструјте корисника. Имајте на уму да такође подешавате поље корисничког имена да прихвати е-пошту. Подразумевано, пасош-локални очекује корисничко име, тако да морате да му кажете да уместо тога шаљете е-пошту.
Користите пасош-локални да такође рукује пријављивањем корисника.
модуле.екпортс = (пасош) => {
пасош.употреба(
"локално пријављивање",
нова локална стратегија(
...
)
);
пасош.употреба(
"лоцал-логин",
нова локална стратегија(
{
корисничко имеФиелд: "емаил",
пассвордФиелд: "пассворд",
},
асинц (е-пошта, лозинка, готово) => {
покушати {
цонст усер = аваит Усер.финдОне({ емаил: емаил });
иф (!усер) враћање урађено (нулл, фалсе);
цонст исМатцх = аваит усер.матцхПассворд (лозинка);
ако (!исМатцх)
повратак урађен (нулл, фалсе);
// ако се лозинке подударају са повратним корисником
повратак урађен (нулл, корисник);
} ухватити (грешка) {
цонсоле.лог (грешка)
повратак урађен (грешка, нетачно);
}
}
)
);
};
Овде проверите да ли корисник постоји у бази података, а ако постоји, проверите да ли се дата лозинка поклапа са оном у бази података. Имајте на уму да такође зовете матцхПассворд() метод на моделу корисника па идите на усерМодел.јс датотеку и додајте је.
УсерСцхема.метходс.матцхПассворд = асинц функција (лозинка) {
покушати {
ретурн аваит бцрипт.цомпаре (пассворд, тхис.пассворд);
} ухватити (грешка) {
избацити нову Грешка (грешка);
}
};
Овај метод упоређује лозинку корисника и ону у бази података и враћа труе ако се подударају.
Корак 4: Подесите руте за аутентификацију
Сада морате да креирате крајње тачке на које ће корисници слати податке. Прво је пут за регистрацију који ће прихватити е-пошту и лозинку новог корисника.
Ин апп.јс, користите средњи софтвер за потврду идентитета пасоша који сте управо креирали да региструјете корисника.
апп.пост(
"/аутх/сигнуп",
пасспорт.аутхентицате('лоцал-сигнуп', { сессион: фалсе }),
(рек, рес, нект) => {
// пријави се
рес.јсон({
корисник: рек.усер,
});
}
);
Повезан: Аутентификација вс. Ауторизација: у чему је разлика?
Ако је успешна, рута за пријаву треба да врати креираног корисника.
Затим креирајте руту за пријаву.
апп.пост(
"/аутх/логин",
пасспорт.аутхентицате('лоцал-логин', { сессион: фалсе }),
(рек, рес, нект) => {
// Пријавите се
рес.јсон({
корисник: рек.усер,
});
}
);
Корак 5: Додајте заштићене руте
До сада сте користили Пасош да креирате међуверски софтвер који региструје корисника у бази података и други који дозвољава регистрованом кориснику да се пријави. Затим ћете креирати средњи софтвер за ауторизацију да бисте заштитили осетљиве руте помоћу ЈСОН веб токена (ЈВТ). Да бисте применили ЈВТ ауторизацију, потребно је да:
- Генеришите ЈВТ токен.
- Проследите токен кориснику. Корисник ће га послати назад у захтевима за ауторизацију.
- Проверите токен који је корисник вратио.
Користићете јсонвебтокен пакет за руковање ЈВТ-овима.
Покрените следећу команду да бисте је инсталирали.
нпм и јсонвебтокен
Затим генеришете токен за сваког корисника који се успешно пријави.
Ин апп.јс, увоз јсонвебтокен и измените руту за пријаву као испод.
апп.пост(
"/аутх/логин",
пасспорт.аутхентицате('лоцал-логин', { сессион: фалсе }),
(рек, рес, нект) => {
// Пријавите се
јвт.сигн({усер: рек.усер}, 'сецретКеи', {екпиресИн: '1х'}, (ерр, токен) => {
ако (грешка) {
врати рес.јсон({
порука: "Пријава није успела",
токен: нулл,
});
}
рес.јсон({
токен
});
})
}
);
У апликацији из стварног живота, користили бисте компликованији тајни кључ и сачували га у конфигурационој датотеци.
Рута за пријаву враћа токен ако је успешна.
Користите пасош-јвт да приступи заштићеним рутама.
нпм и пасош-јвт
Ин пасспортЦонфиг.јс, конфигуришите пасош-јвт.
цонст ЈвтСтратеги = рекуире("пасспорт-јвт").Стратегија;
цонст { ЕктрацтЈвт } = рекуире("пасспорт-јвт")
модуле.екпортс = (пасош) => {
пасош.употреба(
"лоцал-логин",
нова локална стратегија(
...
);
пасош.употреба(
нова ЈвтСтратеги(
{
јвтФромРекуест: ЕктрацтЈвт.фромХеадер("ауторизација"),
сецретОрКеи: "сецретКеи",
},
асинц (јвтПаилоад, готово) => {
покушати {
// Издвој корисника
цонст усер = јвтПаилоад.усер;
урађено (нулл, корисник);
} ухватити (грешка) {
урађено (грешка, нетачно);
}
}
)
);
};
Приметите да издвајате ЈВТ из заглавља ауторизације уместо тела захтева. Ово спречава хакере да пресретну захтев и зграбе токен.
Да видим како пасош-јвт чува руте, створи заштићену руту у апп.јс.
апп.гет(
"/усер/протецтед",
пасспорт.аутхентицате("јвт", {сессион: фалсе }),
(рек, рес, нект) => {
рес.јсон({усер: рек.усер});
}
);
Само захтев са важећим ЈВТ враћа корисничке податке.
Сада сте спремни да своју аутентификацију корисника подигнете на следећи ниво
У овом водичу научили сте како можете да аутентификујете кориснике користећи е-пошту и лозинку уз помоћ пасоша. У почетку може изгледати застрашујуће, али процес је релативно једноставан. Можете ићи још даље и користити добављаче идентитета трећих страна које подржава Пасспорт, као што су Твиттер, Фацебоок и Гоогле.
Важно је разумети основе аутентификације корисника да бисте обезбедили максималан ниво безбедности за ваше онлајн налоге. Дакле, хајде да заронимо.
Реад Нект
- Програмирање
- Програмирање
- Програмски језици
- Алати за програмирање

Мери Гатони је програмер софтвера са страшћу за стварање техничког садржаја који није само информативан већ и привлачан. Када не кодира или пише, ужива у дружењу са пријатељима и на отвореном.
Претплатите се на наш билтен
Придружите се нашем билтену за техничке савете, рецензије, бесплатне е-књиге и ексклузивне понуде!
Кликните овде да бисте се претплатили