मिडलवेयर और संदर्भ
प्रक्रियाओं में प्रमाणीकरण और साझा संदर्भ जोड़ें।
मिडलवेयर और संदर्भ, CoddyKit पर TypeScript Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह TypeScript Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
संदर्भ क्या है
हर tRPC अनुरोध में एक संदर्भ होता है: सभी प्रक्रियाओं के लिए उपलब्ध साझा डेटा, जैसे डेटाबेस client, अनुरोध और वर्तमान उपयोगकर्ता। आप createContext फ़ंक्शन के साथ इसे हर अनुरोध के लिए एक बार बनाते हैं।
export async function createContext({ req }: { req: Request }) {
const token = req.headers.get('authorization');
const user = await getUserFromToken(token);
return { user };
}संदर्भ का प्रकार निर्धारित करना
tRPC createContext से संदर्भ के प्रकार का अनुमान लगाता है और उसे हर प्रक्रिया तक पहुँचाता है। आप इंस्टेंस को उस संदर्भ प्रकार के साथ प्रारंभ करते हैं, ताकि रिज़ॉल्वर में ctx का प्रकार सही दिखाई दे।
import { initTRPC } from '@trpc/server';
type Context = Awaited<ReturnType<typeof createContext>>;
const t = initTRPC.context<Context>().create();रिज़ॉल्वर में ctx पढ़ना
किसी भी प्रक्रिया के भीतर संदर्भ पूरी तरह प्रकार-सुरक्षित ctx के रूप में उपलब्ध होता है। यहाँ एक प्रक्रिया संदर्भ से वर्तमान उपयोगकर्ता पढ़ती है।
const me = t.procedure.query(({ ctx }) => {
// ctx.user is typed from createContext
return ctx.user;
});middleware क्या है
middleware प्रक्रिया रिज़ॉल्वर से पहले चलता है। यह अनुमतियों की जाँच, लॉगिंग या संदर्भ में बदलाव कर सकता है। आगे बढ़ने के लिए यह next() कॉल करता है या अनुरोध अस्वीकार करने के लिए त्रुटि उत्पन्न करता है।
const logger = t.middleware(async ({ path, next }) => {
console.log('calling', path);
return next();
});प्रमाणीकरण middleware
एक सामान्य middleware प्रमाणीकरण लागू करता है। यदि संदर्भ में कोई उपयोगकर्ता नहीं है, तो यह UNAUTHORIZED त्रुटि उत्पन्न करता है; अन्यथा यह रिज़ॉल्वर तक आगे बढ़ता है।
import { TRPCError } from '@trpc/server';
const isAuthed = t.middleware(({ ctx, next }) => {
if (!ctx.user) {
throw new TRPCError({ code: 'UNAUTHORIZED' });
}
return next();
});next के साथ संदर्भ को सीमित करना
middleware next को नया ctx देकर संदर्भ के प्रकार को अधिक विशिष्ट बना सकता है। प्रमाणीकरण जाँच के बाद उपयोगकर्ता का मौजूद होना निश्चित है, इसलिए हम user को संभावित रूप से रिक्त प्रकार से निश्चित रूप से मौजूद प्रकार तक सीमित कर देते हैं।
const isAuthed = t.middleware(({ ctx, next }) => {
if (!ctx.user) throw new TRPCError({ code: 'UNAUTHORIZED' });
return next({ ctx: { user: ctx.user } }); // user now non-null
});सुरक्षित प्रक्रिया बनाना
पुनः उपयोग योग्य सुरक्षित प्रक्रिया बनाने के लिए middleware को .use के साथ जोड़ें। इससे बनाई गई हर प्रक्रिया के लिए प्रमाणीकरण आवश्यक होगा और उसमें उपयोगकर्ता का प्रकार रिक्त नहीं होगा।
export const protectedProcedure = t.procedure.use(isAuthed);
const secret = protectedProcedure.query(({ ctx }) => {
return 'Hello ' + ctx.user.name; // user is guaranteed
});सार्वजनिक बनाम सुरक्षित
अब आपके पास दो निर्माण-खंड हैं: खुले समापन-बिंदुओं के लिए publicProcedure और प्रमाणित समापन-बिंदुओं के लिए protectedProcedure। सही आधार चुनने से पहुँच का दस्तावेज़ीकरण भी होता है और प्रकार तथा रनटाइम दोनों स्तरों पर उसे लागू भी किया जाता है।
const ping = publicProcedure.query(() => 'pong');
const account = protectedProcedure.query(({ ctx }) => ctx.user);प्रकार-सुरक्षित ctx प्रसार
सीमित किया गया संदर्भ आगे भी पहुँचता है: क्योंकि protectedProcedure ने ctx.user के मौजूद होने की गारंटी दी है, इसलिए उस पर बनाई गई हर प्रक्रिया का रिज़ॉल्वर दोबारा जाँच किए बिना उपयोगकर्ता का गैर-रिक्त प्रकार देखता है। middleware इस अपरिवर्तनीय शर्त को एक ही बार में दर्ज करता है।
// In any protectedProcedure resolver:
// ctx.user is User, not User | nullmiddleware को संयोजित करना
middleware को .use की श्रृंखला बनाकर संयोजित किया जाता है। आप पहले लॉगिंग, फिर प्रमाणीकरण और उसके बाद भूमिका-जाँच लागू कर सकते हैं। हर middleware क्रम से चलता है और अगले middleware के लिए संदर्भ को और अधिक सीमित कर सकता है।
const adminProcedure = protectedProcedure.use(({ ctx, next }) => {
if (ctx.user.role !== 'admin') {
throw new TRPCError({ code: 'FORBIDDEN' });
}
return next();
});पूरा चित्र
संदर्भ हर अनुरोध का डेटा उपलब्ध कराता है, middleware उसकी सुरक्षा-जाँच करके उसे अधिक विशिष्ट बनाता है और विशेष प्रक्रियाएँ इन गारंटियों को अपने भीतर शामिल कर लेती हैं। इनपुट स्कीमा और प्रकार-सुरक्षित client के साथ मिलकर आपको ऐसा एपीआई मिलता है जो शुरू से अंत तक रनटाइम और कम्पाइल समय दोनों पर सुरक्षित होता है।
// createContext -> ctx
// middleware -> auth + narrowing
// protectedProcedure -> guaranteed ctx.user
// typed client -> end-to-end safetyत्वरित जाँच
संदर्भ और middleware के बारे में अपनी समझ जाँचिए।
पुनरावलोकन
आपने संदर्भ और middleware के साथ tRPC एपीआई को सुरक्षित किया।
createContextहर अनुरोध के लिए साझा डेटा बनाता है, जिसका प्रकारinitTRPC.contextसे निर्धारित होता है।- middleware रिज़ॉल्वर से पहले चलता है और संदर्भ की सुरक्षा-जाँच करके उसे अधिक विशिष्ट बनाता है।
ctxकोnextमें पास करने से उसका प्रकार सीमित हो जाता है।protectedProcedureप्रमाणीकरण को अपने भीतर शामिल करता है, इसलिए रिज़ॉल्वर को गैर-रिक्त उपयोगकर्ता मिलता है।
आपने एंड-टू-एंड प्रकार-सुरक्षा का पाठ्यक्रम पूरा कर लिया है।
एआई शिक्षक के साथ TypeScript सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 101
- पाठ
- 352
अक्सर पूछे जाने वाले प्रश्न
क्या “मिडलवेयर और संदर्भ” पाठ निःशुल्क है?
हाँ—“मिडलवेयर और संदर्भ” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और TypeScript Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। TypeScript Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“मिडलवेयर और संदर्भ” में मैं क्या सीखूँगा?
प्रक्रियाओं में प्रमाणीकरण और साझा संदर्भ जोड़ें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ TypeScript Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या TypeScript Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर TypeScript Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“मिडलवेयर और संदर्भ” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस TypeScript Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर TypeScript Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।