<prompt> Unda programu ya wavuti ya TypeScript inayoruhusu watumiaji kujisajili na kuingia kwa kutumia anwani zao za barua pepe na nenosiri, huhifadhi data ya mtumiaji katika hifadhidata ya PostgreSQL, na kuzuia ufikiaji wa kurasa fulani kulingana na hali ya uthibitishaji wa mtumiaji.PLINFORMAT  <response>: chapa srcdatabase.tsagiza Sequelize kutoka sequelize-typescript;const sequelize Sekeza mpya lahaja: postgres, mwenyeji: localhost, bandari: 5432, jina la mtumiaji: jina_la_la_la_la_mtumiaji, nenosiri: nywila_ya_postgres, hifadhidata: database_yako_ya_postgres, mifano: __dirname models;usafirishaji chaguo-msingi mfuatano; srcmodelsUser.tsleta Jedwali, Safu, Muundo, Aina ya Data, Ufunguo Msingi kutoka kwa sequelize-typescript;Jedwali tableName: users darasa la kuuza nje Mtumiaji anapanua Mfano Ufunguo wa Msingi SafuwimaDataType.STRING barua pepe!: kamba; SafuwimaDataType.STRING nenosiri!: kamba; srcpasipoti.tskuagiza pasipoti kutoka pasipoti;import Strategy as LocalStrategy kutoka passport-local;ingiza Mtumiaji kutoka kwa .modelsUser;pasipoti. tumia New LocalStrategy usernameField: email , async barua pepe, nenosiri, imekamilika jaribu const user await User.findOne wapi: email ; ikiwa !mtumiaji !mtumiaji.thibitishaNenosirinenosiri return done null, false, message: Barua pepe au nenosiri lisilo sahihi. ; kurudi kumefanywa null, mtumiaji; kukamata kukosea kurudi kumefanywa kukosea; ;passport.serializeUsermtumiaji: Mtumiaji, amemaliza kufanyika null, user.email;;passport.deserializeUserasync barua pepe: kamba, imekamilika jaribu const user await User.findOne wapi: email ; kufanyika null, mtumiaji; kukamata kukosea kufanyika kukosea; ;pasipoti ya kawaida ya kuuza nje; srcapp.tskuagiza Express kutoka kueleza;agiza bodyParser kutoka kwa body-parser;agiza kukiKipindi kutoka kwa kikao cha kuki;kuagiza pasipoti kutoka .pasipoti;ingiza Mtumiaji kutoka kwa .modelsUser;const app express;app.usebodyParser.urlencoded extended: false ;app.usecookieSessionfunguo: your_cookie_secret ;app.usepassport.initialize;app.usepassport.session;app.setangalia injini, ejs;app.get, req, res res.renderindex, user: req.user ;;app.getregister, req, res res.renderjiandikishe;;app.postregister, async req, res const barua pepe, nenosiri req.body; jaribu const newUser await User.createbarua pepe, nenosiri ; res.redirect ingia; kukamata kukosea res.status500.tumaerr.message; ;app.getlogin, req, res res.renderingia;;programu.chapisho Ingia, pasipoti.idhinishalocal, mafanikioElekeza: , kushindwaElekeza: ingia ;app.gettoka, req, res req.logout; reelekeza.kuelekeza;;app.sikiliza3000, console.logSeva ilianza kwenye bandari 3000;; 