<prompt> Tekeleza seva ya Node.js Express iliyo na ncha za usajili wa watumiaji na uthibitishaji kwa kutumia Tokeni za Wavuti za JSON JWT. Hifadhi watumiaji waliosajiliwa katika hifadhidata ya MongoDB iliyo na manenosiri ya haraka. Jumuisha ukaguzi wa uthibitishaji wa umbizo la barua pepe na nguvu ya nenosiri wakati wa usajili.  <response>: Ili kutekeleza seva ya Node.js Express yenye usajili wa mtumiaji na uthibitishaji kwa kutumia Tokeni za Wavuti za JSON JWT, utahitaji kufuata hatua hizi:1. Weka mradi2. Sakinisha vifurushi vinavyohitajika3. Sanidi muunganisho wa MongoDB4. Unda mtindo wa Mtumiaji5. Tekeleza huduma za JWT6. Tekeleza ukaguzi wa uthibitishaji7. Unda njia za usajili wa mtumiaji na uthibitishajiHapa kuna mfano wa utekelezaji:1. Sanidi mradi:Unda saraka mpya ya mradi wako, ingia ndani yake, na uanzishe mradi mpya wa Node.js kwa kuendesha:bashimkdir jwt-auth-servercd jwt-auth-servernpm init -y2. Sakinisha vifurushi vinavyohitajika:bashinpm install express mongoose bcryptjs jsonwebtoken dotenv cors body-parser3. Sanidi muunganisho wa MongoDB:Unda faili ya .env kwenye mzizi wa mradi wako na uongeze kamba yako ya unganisho ya jina la mtumiaji, nenosiri, na database-name na kitambulisho chako halisi cha MongoDB.4. Unda muundo wa Mtumiaji mifanoMtumiaji.js: javascriptconst mongoose needmongoose;const Schema mongoose.Schema;const UserSchema Schema mpya barua pepe: aina: Kamba, inahitajika: kweli, kipekee: kweli , nenosiri: aina: Kamba, inahitajika: kweli ;module.exports mongoose.modelMtumiaji, UserSchema;5. Tekeleza huduma za JWT vifaajwt.js: javascriptconst jwt hitajijsonwebtoken;const dotenv needdotenv;dotenv.config;kazi generateTokenmtumiaji rudisha jwt.sign id: user._id , process.env.SECRET_KEY, expiresIn: 24h ;fanya kazi verifyTokenishara jaribu rudisha jwt.verifytoken, process.env.SECRET_KEY; kukamata kukosea kurudi null; module.exports generateToken, verifyToken ;6. Tekeleza ukaguzi wa uthibitishaji utilsvalidation.js: javascriptkazi isValidEmailbarua pepe const regex rudisha regex.testbarua pepe;kazi isStrongPasswordnenosiri Angalau herufi kubwa moja, herufi ndogo moja, nambari moja na herufi moja maalum, na angalau herufi 8. const regex ?.a-z?.A-Z?.d?.!?A-Za -zd!?8,; rudisha regex.testnenosiri;module.exports isValidEmail, isStrongPassword ;7. Unda njia za usajili na uthibitishaji wa watumiaji index.js: javascriptconst express needexpress;const mongoose needmongoose;const bcrypt needbcryptjs;const cors needcors;const bodyParser needbody-parser;const dotenv needdotenv;const Mtumiaji hitaji.modelsMtumiaji;const generateToken, verifyToken need.utilsjwt;const isValidEmail, isStrongPassword need.utilsvalidation;dotenv.config;mongoose.connectprocess.env.MONGODB_URI, useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true ;const app express;app.usecors;app.usebodyParser.json;app.postregister, async req, res const barua pepe, nenosiri req.body; ikiwa !isValidEmailbarua pepe return res.status400.json ujumbe: Muundo batili wa barua pepe ; ikiwa !isStrongPasswordnenosiri return res.status400.json ujumbe: Nenosiri dhaifu. Lazima iwe na angalau herufi moja kubwa, herufi ndogo moja, nambari moja, herufi moja maalum na iwe na angalau herufi 8. ; const existUser await User.findOne email ; ikiwa Mtumiaji aliyepo return res.status409.json ujumbe: Barua pepe tayari inatumika ; const hashedPassword nasubiri bcrypt.hashnenosiri, 10; const user new Userbarua pepe, nenosiri: hashedPassword ; subiri user.save; res.status201.json ujumbe: Mtumiaji amesajiliwa kwa mafanikio, mtumiaji ;;app.postlogin, async req, res const barua pepe, nenosiri req.body; const user await User.findOne email ; ikiwa !mtumiaji !inasubiri bcrypt.comparenenosiri, mtumiaji.nenosiri return res.status401.json ujumbe: Barua pepe au nenosiri batili ; const token generateTokenmtumiaji; res.json ujumbe: Imeingia kwa mafanikio, ishara ;;const PORT process.env.PORT 3000;app.listenPORT, console.logSeva inayoendesha kwenye bandari PORT;Sasa unaweza kuendesha seva yako kwa kutumia node index.js na ujaribu miisho ya usajili na uthibitishaji kwa zana kama vile Postman au curl. 