Next.js ਪ੍ਰਮਾਣਿਕਤਾ ਲਾਗੂ ਕਰਨ ਵਿੱਚ Node.js 'crypto' ਮੋਡੀਊਲ ਐਜ ਰਨਟਾਈਮ ਸਮੱਸਿਆਵਾਂ ਨੂੰ ਹੱਲ ਕਰਨਾ

NextAuth

Next.js Auth ਏਕੀਕਰਣ ਵਿੱਚ ਐਜ ਰਨਟਾਈਮ ਚੁਣੌਤੀਆਂ ਨੂੰ ਸਮਝਣਾ

Next.js ਵਿੱਚ ਇੱਕ ਸੁਰੱਖਿਅਤ ਪ੍ਰਮਾਣਿਕਤਾ ਸਿਸਟਮ ਬਣਾਉਣਾ ਦਿਲਚਸਪ ਹੈ, ਪਰ ਕਈ ਵਾਰ, ਤਕਨੀਕੀ ਚੁਣੌਤੀਆਂ ਜਿਵੇਂ ਕਿ 'ਕ੍ਰਿਪਟੋ ਮੋਡੀਊਲ ਐਜ ਰਨਟਾਈਮ ਵਿੱਚ ਸਮਰਥਿਤ ਨਹੀਂ' ਗਲਤੀ ਤਰੱਕੀ ਵਿੱਚ ਵਿਘਨ ਪਾ ਸਕਦੀ ਹੈ। ਜੇਕਰ ਤੁਸੀਂ Auth.js ਅਤੇ MongoDB ਨਾਲ ਕੰਮ ਕਰ ਰਹੇ ਹੋ, ਤਾਂ ਇਹ ਮੁੱਦਾ ਖਾਸ ਤੌਰ 'ਤੇ ਨਿਰਾਸ਼ਾਜਨਕ ਮਹਿਸੂਸ ਕਰ ਸਕਦਾ ਹੈ। 😓

ਆਪਣੇ ਪ੍ਰਮਾਣਿਕਤਾ ਤਰਕ ਨੂੰ ਤਿਆਰ ਕਰਨ ਵਿੱਚ ਘੰਟੇ ਬਿਤਾਉਣ ਦੀ ਕਲਪਨਾ ਕਰੋ, ਸਿਰਫ NextAuth ਨਾਲ MongoDB ਦੇ ਏਕੀਕਰਣ ਦੌਰਾਨ ਇੱਕ ਰਨਟਾਈਮ ਗਲਤੀ ਦਾ ਸਾਹਮਣਾ ਕਰਨ ਲਈ। ਇਹ ਇੱਕ ਗੋਰਮੇਟ ਭੋਜਨ ਤਿਆਰ ਕਰਨ ਵਰਗਾ ਹੈ, ਸਿਰਫ ਇਹ ਮਹਿਸੂਸ ਕਰਨ ਲਈ ਕਿ ਤੁਸੀਂ ਆਖਰੀ ਪਲ 'ਤੇ ਇੱਕ ਮਹੱਤਵਪੂਰਣ ਸਮੱਗਰੀ ਨੂੰ ਗੁਆ ਰਹੇ ਹੋ. ਇਹ ਉਹ ਥਾਂ ਹੈ ਜਿੱਥੇ ਐਜ ਰਨਟਾਈਮ ਅਨੁਕੂਲਤਾ ਦੀ ਸਪੱਸ਼ਟ ਸਮਝ ਮਹੱਤਵਪੂਰਨ ਬਣ ਜਾਂਦੀ ਹੈ.

ਇਹ ਸਮੱਸਿਆ ਅਕਸਰ ਪੈਦਾ ਹੁੰਦੀ ਹੈ ਕਿਉਂਕਿ Next.js ਵਿੱਚ ਐਜ ਰਨਟਾਈਮ ਦੀਆਂ ਸੀਮਾਵਾਂ ਹਨ, ਜਿਵੇਂ ਕਿ ਕੁਝ Node.js ਮੋਡੀਊਲਾਂ ਲਈ ਪ੍ਰਤਿਬੰਧਿਤ ਸਮਰਥਨ। ਪ੍ਰਸਿੱਧ ਕ੍ਰਿਪਟੋ ਮੋਡੀਊਲ ਇੱਕ ਅਜਿਹੀ ਸੀਮਾ ਹੈ, ਜੋ ਅਕਸਰ ਪਾਸਵਰਡ ਹੈਂਡਲਿੰਗ ਅਤੇ ਇਨਕ੍ਰਿਪਸ਼ਨ ਵਿੱਚ ਵਰਤੀ ਜਾਂਦੀ ਹੈ। ਅਜਿਹੇ ਮੁੱਦੇ ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਇਸ ਬਾਰੇ ਉਲਝਣ ਵਿੱਚ ਛੱਡ ਸਕਦੇ ਹਨ ਕਿ ਅੱਗੇ ਕਿਵੇਂ ਵਧਣਾ ਹੈ।

ਇਸ ਗਾਈਡ ਵਿੱਚ, ਅਸੀਂ ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਸੁਰੱਖਿਆ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਅਭਿਆਸਾਂ ਨੂੰ ਕਾਇਮ ਰੱਖਦੇ ਹੋਏ ਇਸ ਗਲਤੀ ਨੂੰ ਹੱਲ ਕਰਨ ਲਈ ਇੱਕ ਕਦਮ-ਦਰ-ਕਦਮ ਹੱਲ ਦੀ ਪੜਚੋਲ ਕਰਾਂਗੇ। ਭਾਵੇਂ ਤੁਸੀਂ ਆਪਣੀ Next.js ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਸਮੱਸਿਆ ਦਾ ਨਿਪਟਾਰਾ ਕਰਨ ਵਾਲੇ ਵਿਕਾਸਕਾਰ ਹੋ ਜਾਂ ਸਿਰਫ਼ Auth.js ਨਾਲ ਸ਼ੁਰੂ ਕਰ ਰਹੇ ਹੋ, ਇਹ ਅੰਦਰੂਨੀ-ਝਾਤਾਂ ਤੁਹਾਨੂੰ ਆਸਾਨੀ ਨਾਲ ਨੈਵੀਗੇਟ ਕਰਨ ਅਤੇ ਸਮੱਸਿਆ ਨੂੰ ਹੱਲ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਨਗੀਆਂ। 🚀

ਹੁਕਮ ਵਰਤੋਂ ਦੀ ਉਦਾਹਰਨ
connectToMongoDB MongoDB ਨਾਲ ਕੁਨੈਕਸ਼ਨ ਸਥਾਪਤ ਕਰਨ ਲਈ ਇੱਕ ਸਹਾਇਕ ਫੰਕਸ਼ਨ। ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਵਿਕਾਸ ਵਿੱਚ ਕਨੈਕਸ਼ਨਾਂ ਦੀ ਮੁੜ ਵਰਤੋਂ ਕੀਤੀ ਜਾਂਦੀ ਹੈ, ਐਜ ਰਨਟਾਈਮ ਸੀਮਾਵਾਂ ਤੋਂ ਬਚਦੇ ਹੋਏ।
MongoDBAdapter MongoDB ਨੂੰ NextAuth ਲਈ ਡੇਟਾਬੇਸ ਅਡੈਪਟਰ ਵਜੋਂ ਏਕੀਕ੍ਰਿਤ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਉਪਭੋਗਤਾ ਸੈਸ਼ਨ ਸਟੋਰੇਜ ਅਤੇ ਮੁੜ ਪ੍ਰਾਪਤੀ ਨੂੰ ਸੁਚਾਰੂ ਬਣਾਉਂਦਾ ਹੈ।
bcrypt.compareSync ਇੱਕ ਪਲੇਨ ਟੈਕਸਟ ਪਾਸਵਰਡ ਦੀ ਤੁਲਨਾ ਸਮਕਾਲੀ ਤੌਰ 'ਤੇ ਹੈਸ਼ ਕੀਤੇ ਪਾਸਵਰਡ ਨਾਲ ਕਰਦਾ ਹੈ, ਪ੍ਰਮਾਣੀਕਰਨ ਪ੍ਰਕਿਰਿਆ ਵਿੱਚ ਤੁਰੰਤ ਪ੍ਰਮਾਣਿਕਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ।
findOne ਲੌਗਇਨ ਦੌਰਾਨ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਲੱਭਣ ਲਈ ਮਹੱਤਵਪੂਰਨ, ਖਾਸ ਪੁੱਛਗਿੱਛ ਪੈਰਾਮੀਟਰਾਂ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਇੱਕ ਸਿੰਗਲ ਦਸਤਾਵੇਜ਼ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਣ ਵਾਲਾ ਇੱਕ MongoDB ਸੰਗ੍ਰਹਿ ਵਿਧੀ।
throw new Error ਡੀਬੱਗਿੰਗ ਨੂੰ ਵਧਾਉਣ ਅਤੇ ਪ੍ਰਮਾਣਿਕਤਾ ਦੌਰਾਨ ਸਪਸ਼ਟ ਫੀਡਬੈਕ ਪ੍ਰਦਾਨ ਕਰਨ ਲਈ ਕਸਟਮ ਗਲਤੀ ਸੁਨੇਹੇ ਸੁੱਟਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ "ਅਵੈਧ ਪ੍ਰਮਾਣ ਪੱਤਰ"।
session.strategy NextAuth ਵਿੱਚ ਸੈਸ਼ਨ ਰਣਨੀਤੀ ਦੇ ਤੌਰ 'ਤੇ "jwt" ਨੂੰ ਨਿਸ਼ਚਿਤ ਕਰਦਾ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਸੈਸ਼ਨ ਡਾਟਾ ਸਰਵਰ-ਸਾਈਡ ਸਟੋਰੇਜ ਦੀ ਬਜਾਏ ਟੋਕਨਾਂ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਸਟੋਰ ਕੀਤਾ ਗਿਆ ਹੈ।
global._mongoClientPromise ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਮੋਂਗੋਡੀਬੀ ਕਲਾਇੰਟ ਕੁਨੈਕਸ਼ਨ ਬੇਲੋੜੇ ਕੁਨੈਕਸ਼ਨਾਂ ਤੋਂ ਬਚਦੇ ਹੋਏ, ਵਿਕਾਸ ਵਿੱਚ ਹੌਟ ਮੋਡੀਊਲ ਰੀਪਲੇਸਮੈਂਟ ਵਿੱਚ ਬਣੇ ਰਹਿਣ।
authorize ਕ੍ਰੈਡੈਂਸ਼ੀਅਲ ਪ੍ਰਦਾਤਾ ਵਿੱਚ ਪਰਿਭਾਸ਼ਿਤ ਇੱਕ ਫੰਕਸ਼ਨ ਜੋ ਉਪਭੋਗਤਾ ਪ੍ਰਮਾਣਿਕਤਾ ਤਰਕ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਪਾਸਵਰਡ ਦੀ ਤੁਲਨਾ ਅਤੇ ਗਲਤੀ ਹੈਂਡਲਿੰਗ ਸ਼ਾਮਲ ਹੈ।
Jest's expect().toEqual() ਇਹ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਯੂਨਿਟ ਟੈਸਟਿੰਗ ਵਿੱਚ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਕਿ ਇੱਕ ਫੰਕਸ਼ਨ ਦਾ ਅਸਲ ਆਉਟਪੁੱਟ ਉਮੀਦ ਕੀਤੀ ਆਉਟਪੁੱਟ ਨਾਲ ਮੇਲ ਖਾਂਦਾ ਹੈ।
Jest's expect().rejects.toThrow() ਪ੍ਰਮਾਣਿਤ ਕਰਦਾ ਹੈ ਕਿ ਇੱਕ ਫੰਕਸ਼ਨ ਸਹੀ ਢੰਗ ਨਾਲ ਇੱਕ ਗਲਤੀ ਸੁੱਟਦਾ ਹੈ ਜਦੋਂ ਅਵੈਧ ਇਨਪੁਟਸ ਪ੍ਰਦਾਨ ਕੀਤੇ ਜਾਂਦੇ ਹਨ, ਅਸਫਲਤਾ ਦੇ ਦ੍ਰਿਸ਼ਾਂ ਦੀ ਜਾਂਚ ਲਈ ਜ਼ਰੂਰੀ।

Next.js ਪ੍ਰਮਾਣਿਕਤਾ ਵਿੱਚ ਐਜ ਰਨਟਾਈਮ ਗਲਤੀਆਂ ਨੂੰ ਦੂਰ ਕਰਨਾ

ਸਕ੍ਰਿਪਟਾਂ ਨੇ ਕਿਨਾਰੇ ਦੇ ਰਨਟਾਈਮ ਮੁੱਦਿਆਂ ਤੋਂ ਬਚਦੇ ਹੋਏ ਇੱਕ Next.js ਪ੍ਰੋਜੈਕਟ ਵਿੱਚ MongoDB ਨਾਲ Auth.js ਨੂੰ ਏਕੀਕ੍ਰਿਤ ਕਰਨ ਦੀ ਚੁਣੌਤੀ ਨੂੰ ਹੱਲ ਕੀਤਾ ਹੈ। ਸਮੱਸਿਆ ਆਮ ਤੌਰ 'ਤੇ ਇਸ ਲਈ ਪੈਦਾ ਹੁੰਦੀ ਹੈ ਕਿਉਂਕਿ Next.js Edge Runtime ਦੀਆਂ ਕੁਝ Node.js ਮੋਡੀਊਲਾਂ ਨਾਲ ਸੀਮਾਵਾਂ ਹਨ, ਜਿਸ ਵਿੱਚ 'crypto' ਮੋਡੀਊਲ ਵੀ ਸ਼ਾਮਲ ਹੈ। ਚਿੰਤਾਵਾਂ ਨੂੰ 'auth.js`, `auth.config.js`, ਅਤੇ `db.js` ਵਰਗੀਆਂ ਵੱਖਰੀਆਂ ਫਾਈਲਾਂ ਵਿੱਚ ਵੱਖ ਕਰਕੇ, ਲਾਗੂਕਰਨ ਮਾਡਯੂਲਰਿਟੀ ਅਤੇ ਸਪਸ਼ਟਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ, ਜੋ ਸਕੇਲੇਬਿਲਟੀ ਅਤੇ ਡੀਬੱਗਿੰਗ ਲਈ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਉਦਾਹਰਨ ਲਈ, `db.js` ਡਾਟਾਬੇਸ ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਇਸ ਤਰੀਕੇ ਨਾਲ ਸੰਭਾਲਦਾ ਹੈ ਜੋ ਗਲੋਬਲ ਕਨੈਕਸ਼ਨ ਕੈਚਿੰਗ ਵਰਗੀਆਂ ਤਕਨੀਕਾਂ ਰਾਹੀਂ ਵਿਕਾਸ ਵਿੱਚ ਕਈ ਕੁਨੈਕਸ਼ਨਾਂ ਤੋਂ ਬਚਦਾ ਹੈ। ਇਹ ਢਾਂਚਾ ਇੱਕ ਟੀਮ ਵਿੱਚ ਵੱਖਰੀਆਂ ਭੂਮਿਕਾਵਾਂ ਸਥਾਪਤ ਕਰਨ ਦੇ ਸਮਾਨ ਹੈ - ਹਰ ਇੱਕ ਇੱਕ ਖਾਸ ਜ਼ਿੰਮੇਵਾਰੀ 'ਤੇ ਧਿਆਨ ਕੇਂਦਰਤ ਕਰਦਾ ਹੈ। 💡

`auth.config.js` ਵਿੱਚ, ਕ੍ਰੈਡੈਂਸ਼ੀਅਲ ਪ੍ਰਦਾਤਾ ਵਿੱਚ `ਅਧਿਕਾਰਤ` ਫੰਕਸ਼ਨ ਦੀ ਵਰਤੋਂ ਉਪਭੋਗਤਾ ਪ੍ਰਮਾਣ ਪੱਤਰਾਂ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਲਈ ਤਰਕ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰਦੀ ਹੈ। ਇਸ ਵਿੱਚ MongoDB ਤੋਂ ਉਪਭੋਗਤਾ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਨਾ ਅਤੇ bcrypt ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਉਹਨਾਂ ਦੇ ਪਾਸਵਰਡ ਦੀ ਤੁਲਨਾ ਕਰਨਾ ਸ਼ਾਮਲ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਕਲਪਨਾ ਕਰੋ ਕਿ ਇੱਕ ਉਪਭੋਗਤਾ ਆਪਣਾ ਈਮੇਲ ਅਤੇ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰ ਰਿਹਾ ਹੈ; ਸਕ੍ਰਿਪਟ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਡਾਟਾਬੇਸ ਦੀ ਜਾਂਚ ਕਰਦੀ ਹੈ ਅਤੇ ਪਹੁੰਚ ਦੇਣ ਤੋਂ ਪਹਿਲਾਂ ਪਾਸਵਰਡ ਨਾਲ ਮੇਲ ਖਾਂਦੀ ਹੈ। ਸਪਸ਼ਟ ਗਲਤੀ ਹੈਂਡਲਿੰਗ ਦੀ ਵਰਤੋਂ, ਜਿਵੇਂ ਕਿ "ਅਵੈਧ ਪ੍ਰਮਾਣ ਪੱਤਰ" ਗਲਤੀ ਨੂੰ ਸੁੱਟਣਾ, ਤੁਰੰਤ ਫੀਡਬੈਕ ਪ੍ਰਦਾਨ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ, ਜਿਵੇਂ ਕਿ ਇੱਕ ਕਾਰ ਡੈਸ਼ਬੋਰਡ ਡਰਾਈਵਰ ਨੂੰ ਫਲੈਟ ਟਾਇਰ ਬਾਰੇ ਸੁਚੇਤ ਕਰਦਾ ਹੈ। 🚗

ਦੂਜੇ ਪਾਸੇ, `auth.js` ਸੈਸ਼ਨ ਡੇਟਾ ਨੂੰ ਸਹਿਜੇ ਹੀ ਪ੍ਰਬੰਧਨ ਕਰਨ ਅਤੇ ਇਸਨੂੰ ਡੇਟਾਬੇਸ ਨਾਲ ਸਮਕਾਲੀ ਕਰਨ ਲਈ MongoDBAdapter ਨੂੰ ਏਕੀਕ੍ਰਿਤ ਕਰਦਾ ਹੈ। ਇਹ ਐਜ ਰਨਟਾਈਮ ਰੁਕਾਵਟਾਂ ਨੂੰ ਤੋੜੇ ਬਿਨਾਂ MongoDB ਨਾਲ ਜੁੜਨ ਲਈ `db.js` ਤੋਂ `clientPromise` 'ਤੇ ਨਿਰਭਰ ਕਰਦਾ ਹੈ। ਇਹ ਪਹੁੰਚ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਸੈਸ਼ਨ ਦਾ ਪ੍ਰਬੰਧਨ ਮਜ਼ਬੂਤ ​​ਅਤੇ ਪ੍ਰਦਰਸ਼ਨਕਾਰੀ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਜਦੋਂ ਕੋਈ ਉਪਭੋਗਤਾ ਸਾਈਨ ਇਨ ਕਰਦਾ ਹੈ, ਤਾਂ ਉਹਨਾਂ ਦੇ ਸੈਸ਼ਨ ਨੂੰ JWT ਦੇ ਰੂਪ ਵਿੱਚ ਸੁਰੱਖਿਅਤ ਰੂਪ ਨਾਲ ਸਟੋਰ ਕੀਤਾ ਜਾਂਦਾ ਹੈ। ਇਹ ਹਰ ਦਰਵਾਜ਼ੇ 'ਤੇ ਲਗਾਤਾਰ ਜਾਂਚਾਂ ਦੀ ਲੋੜ ਤੋਂ ਬਿਨਾਂ ਕਿਸੇ ਇਮਾਰਤ ਦੇ ਵੱਖ-ਵੱਖ ਖੇਤਰਾਂ ਤੱਕ ਪਹੁੰਚਣ ਲਈ ਕਿਸੇ ਨੂੰ ਸੁਰੱਖਿਅਤ ਪਾਸ ਦੇਣ ਦੇ ਸਮਾਨ ਹੈ।

ਅੰਤ ਵਿੱਚ, ਪ੍ਰਮਾਣੀਕਰਣ ਪ੍ਰਣਾਲੀ ਦੀ ਭਰੋਸੇਯੋਗਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਵਿੱਚ ਯੂਨਿਟ ਟੈਸਟਿੰਗ ਇੱਕ ਮਹੱਤਵਪੂਰਣ ਭੂਮਿਕਾ ਅਦਾ ਕਰਦੀ ਹੈ। ਜੇਸਟ ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਲਿਖੀਆਂ ਗਈਆਂ ਟੈਸਟ ਸਕ੍ਰਿਪਟਾਂ, ਉਪਭੋਗਤਾ ਲੌਗਇਨ ਲਈ ਸਫਲਤਾ ਅਤੇ ਅਸਫਲਤਾ ਦੋਵਾਂ ਦ੍ਰਿਸ਼ਾਂ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰਦੀਆਂ ਹਨ। ਇਹ ਮਹੱਤਵਪੂਰਨ ਹੈ ਕਿਉਂਕਿ ਇੱਕ ਅਣਜਾਣ ਬੱਗ ਸੁਰੱਖਿਆ ਜਾਂ ਉਪਭੋਗਤਾ ਅਨੁਭਵ ਨਾਲ ਸਮਝੌਤਾ ਕਰ ਸਕਦਾ ਹੈ। ਇਸ ਟੈਸਟਿੰਗ ਪੜਾਅ ਬਾਰੇ ਸੋਚੋ ਜਿਵੇਂ ਕਿ ਇੱਕ ਕਾਰ ਨੂੰ ਗਾਹਕ ਤੱਕ ਪਹੁੰਚਾਉਣ ਤੋਂ ਪਹਿਲਾਂ ਇਸ ਦੀਆਂ ਸਾਰੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਟੈਸਟ-ਡ੍ਰਾਈਵਿੰਗ ਕਰਨਾ। ਪ੍ਰਮਾਣਿਕਤਾ ਅਤੇ ਸੁਰੱਖਿਆ ਦੀਆਂ ਇਹ ਪਰਤਾਂ ਯਕੀਨੀ ਬਣਾਉਂਦੀਆਂ ਹਨ ਕਿ ਐਪਲੀਕੇਸ਼ਨ ਸੁਚਾਰੂ ਢੰਗ ਨਾਲ ਚੱਲਦੀ ਹੈ, ਭਾਵੇਂ ਰਨਟਾਈਮ ਵਾਤਾਵਰਣ ਕੋਈ ਵੀ ਹੋਵੇ। ਇਹਨਾਂ ਅਭਿਆਸਾਂ ਦੀ ਪਾਲਣਾ ਕਰਕੇ, ਡਿਵੈਲਪਰ ਆਮ ਖਰਾਬੀਆਂ ਤੋਂ ਬਚ ਸਕਦੇ ਹਨ ਅਤੇ ਐਪਲੀਕੇਸ਼ਨਾਂ ਬਣਾ ਸਕਦੇ ਹਨ ਜੋ ਨਾ ਸਿਰਫ ਕਾਰਜਸ਼ੀਲ ਹਨ ਬਲਕਿ ਸੁਰੱਖਿਅਤ ਅਤੇ ਭਰੋਸੇਮੰਦ ਵੀ ਹਨ।

ਵਿਕਲਪਿਕ ਪਹੁੰਚ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ Next.js ਵਿੱਚ 'ਕ੍ਰਿਪਟੋ' ਮੋਡੀਊਲ ਨਾਲ ਐਜ ਰਨਟਾਈਮ ਮੁੱਦਿਆਂ ਨੂੰ ਹੱਲ ਕਰਨਾ

ਇਹ ਹੱਲ ਕ੍ਰੈਡੈਂਸ਼ੀਅਲਸ ਨੂੰ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਸੰਭਾਲਣ ਲਈ Next.js ਅਤੇ MongoDB ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋਏ ਮਾਡਿਊਲਰ ਅਤੇ ਅਨੁਕੂਲਿਤ ਬੈਕਐਂਡ ਸਕ੍ਰਿਪਟਿੰਗ ਦਾ ਲਾਭ ਲੈਂਦਾ ਹੈ।

import { NextAuthConfig } from "next-auth";
import Credentials from "next-auth/providers/credentials";
import bcrypt from "bcrypt";
// Import MongoDB client separately to avoid edge runtime issues
import { connectToMongoDB } from "./lib/db";

// Modular configuration for authentication
const authConfig = {
  providers: [
    Credentials({
      credentials: {
        email: { label: "Email", type: "text" },
        password: { label: "Password", type: "password" }
      },
      async authorize(credentials) {
        const { db } = await connectToMongoDB();
        const user = await db.collection("users").findOne({ email: credentials.email });
        if (!user) throw new Error("User not found");
        const isPasswordValid = bcrypt.compareSync(credentials.password, user.password);
        if (!isPasswordValid) throw new Error("Invalid credentials");
        return { name: user.name, email: user.email };
      }
    })
  ]
};

export default authConfig;

ਸਰਵਰ ਰਹਿਤ-ਸੁਰੱਖਿਅਤ ਮੋਂਗੋਡੀਬੀ ਏਕੀਕਰਣ ਦੇ ਨਾਲ Auth.js ਨੂੰ ਲਾਗੂ ਕਰਨਾ

ਇਹ ਸਕ੍ਰਿਪਟ Next.js ਵਿੱਚ ਐਜ ਰਨਟਾਈਮ ਗਲਤੀਆਂ ਤੋਂ ਬਚਣ ਲਈ ਇੱਕ ਸਰਵਰ ਰਹਿਤ-ਸੁਰੱਖਿਅਤ ਵਿਧੀ ਨਾਲ MongoDB ਨੂੰ ਜੋੜਦੀ ਹੈ।

import NextAuth from "next-auth";
import authConfig from "./auth.config";
import { MongoDBAdapter } from "@auth/mongodb-adapter";
import clientPromise from "./lib/db";

export default async function auth(req, res) {
  const handlers = await NextAuth({
    adapter: MongoDBAdapter(clientPromise),
    session: { strategy: "jwt" },
    ...authConfig
  });
  return handlers(req, res);
}

ਕ੍ਰੈਡੈਂਸ਼ੀਅਲ ਹੈਂਡਲਿੰਗ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਲਈ ਯੂਨਿਟ ਟੈਸਟ ਸਕ੍ਰਿਪਟ

ਇਹ ਸਕ੍ਰਿਪਟ ਕ੍ਰੈਡੈਂਸ਼ੀਅਲ ਪ੍ਰਮਾਣਿਕਤਾ ਤਰਕ ਦੀ ਮਜ਼ਬੂਤ ​​ਜਾਂਚ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣ ਲਈ ਜੈਸਟ ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ।

import { authorize } from "./auth.config";

test("Valid credentials return user object", async () => {
  const mockCredentials = { email: "test@example.com", password: "password123" };
  const mockUser = { name: "Test User", email: "test@example.com" };
  const user = await authorize(mockCredentials);
  expect(user).toEqual(mockUser);
});

test("Invalid credentials throw error", async () => {
  const mockCredentials = { email: "test@example.com", password: "wrongpassword" };
  await expect(authorize(mockCredentials)).rejects.toThrow("Invalid credentials");
});

Next.js ਪ੍ਰਮਾਣਿਕਤਾ ਵਿੱਚ ਡੇਟਾਬੇਸ ਅਤੇ ਰਨਟਾਈਮ ਚੁਣੌਤੀਆਂ ਨੂੰ ਸੰਬੋਧਿਤ ਕਰਨਾ

Next.js ਨਾਲ ਕੰਮ ਕਰਦੇ ਸਮੇਂ ਅਤੇ ਸੁਰੱਖਿਅਤ ਉਪਭੋਗਤਾ ਲੌਗਇਨ ਲਈ Auth.js ਨੂੰ ਲਾਗੂ ਕਰਦੇ ਸਮੇਂ, ਸਹਿਜ ਡੇਟਾਬੇਸ ਏਕੀਕਰਣ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਣਾ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਇੱਕ ਮੁੱਖ ਚੁਣੌਤੀ ਐਜ ਰਨਟਾਈਮ ਨੂੰ ਅਨੁਕੂਲ ਬਣਾਉਣਾ ਹੈ, ਜੋ ਕਿ ਕੁਝ ਖਾਸ Node.js ਮੋਡੀਊਲ ਦੀ ਵਰਤੋਂ 'ਤੇ ਪਾਬੰਦੀ ਲਗਾਉਂਦੀ ਹੈ, ਜਿਸ ਵਿੱਚ ਵਿਆਪਕ ਤੌਰ 'ਤੇ ਵਰਤੇ ਜਾਂਦੇ 'ਕ੍ਰਿਪਟੋ' ਮੋਡੀਊਲ ਸ਼ਾਮਲ ਹਨ। ਸਮੱਸਿਆ ਸਪੱਸ਼ਟ ਹੋ ਜਾਂਦੀ ਹੈ ਜਦੋਂ ਮੋਂਗੋਡੀਬੀ ਨੂੰ ਏਜ-ਅਨੁਕੂਲ ਵਾਤਾਵਰਣ ਵਿੱਚ ਜੋੜਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਹੱਲ ਵਿੱਚ ਡੇਟਾਬੇਸ ਕਨੈਕਸ਼ਨ ਨੂੰ ਮਾਡਯੂਲਰਾਈਜ਼ ਕਰਨਾ ਅਤੇ ਇਸ ਨੂੰ ਐਜ ਵਾਤਾਵਰਨ ਲਈ ਅਨੁਕੂਲ ਬਣਾਉਣਾ ਸ਼ਾਮਲ ਹੈ। ਇਹ ਪਹੁੰਚ ਨਾ ਸਿਰਫ਼ ਰਨਟਾਈਮ ਅਨੁਕੂਲਤਾ ਮੁੱਦੇ ਨੂੰ ਹੱਲ ਕਰਦੀ ਹੈ ਬਲਕਿ ਕੋਡ ਦੀ ਸਾਂਭ-ਸੰਭਾਲ ਨੂੰ ਵੀ ਵਧਾਉਂਦੀ ਹੈ, ਖਾਸ ਕਰਕੇ ਵੱਡੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਵਿੱਚ। 🌐

ਇੱਕ ਹੋਰ ਮਹੱਤਵਪੂਰਨ ਵਿਚਾਰ ਸੈਸ਼ਨ ਹੈਂਡਲਿੰਗ ਅਤੇ ਟੋਕਨ ਪ੍ਰਬੰਧਨ ਦੀ ਭੂਮਿਕਾ ਹੈ। JWT-ਅਧਾਰਿਤ ਸੈਸ਼ਨਾਂ ਦੀ ਵਰਤੋਂ ਕਰਨਾ, ਜਿਵੇਂ ਕਿ ਉਪਰੋਕਤ ਸਕ੍ਰਿਪਟਾਂ ਵਿੱਚ ਪ੍ਰਦਰਸ਼ਿਤ ਕੀਤਾ ਗਿਆ ਹੈ, ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਸਰਵਰ-ਸਾਈਡ ਸਟੋਰੇਜ 'ਤੇ ਭਰੋਸਾ ਕੀਤੇ ਬਿਨਾਂ ਸੈਸ਼ਨ ਡੇਟਾ ਸੁਰੱਖਿਅਤ ਰਹੇ। ਇਹ ਤਕਨੀਕ ਲਗਾਤਾਰ ਪ੍ਰਮਾਣਿਕਤਾ ਜਾਂਚਾਂ ਦੀ ਲੋੜ ਤੋਂ ਬਿਨਾਂ ਸਹਿਜ ਪਹੁੰਚ ਲਈ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਇੱਕ ਸੁਰੱਖਿਅਤ ਪਾਸ ਜਾਰੀ ਕਰਨ ਦੇ ਸਮਾਨ ਹੈ। ਵਾਅਦਾ-ਆਧਾਰਿਤ ਕਨੈਕਸ਼ਨ ਹੈਂਡਲਰ ਦੇ ਨਾਲ ਮੋਂਗੋਡੀਬੀਏਡੈਪਟਰ ਦਾ ਲਾਭ ਲੈ ਕੇ, ਡਿਵੈਲਪਰ ਐਜ ਰਨਟਾਈਮ ਸੀਮਾਵਾਂ ਦੀ ਪਾਲਣਾ ਕਰਦੇ ਹੋਏ ਕੁਸ਼ਲਤਾ ਨਾਲ ਸੈਸ਼ਨ ਸਟੋਰੇਜ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦੇ ਹਨ। ਉਦਾਹਰਨ ਲਈ, ਸਰਵਰ ਰਹਿਤ ਫੰਕਸ਼ਨਾਂ ਵਿੱਚ ਇਸ ਪਹੁੰਚ ਨੂੰ ਸਾਂਝਾ ਕਰਨਾ ਓਵਰਹੈੱਡ ਦੀ ਘੱਟੋ-ਘੱਟ ਕਾਰਗੁਜ਼ਾਰੀ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ। 🚀

ਅੰਤ ਵਿੱਚ, ਇੱਕ ਸੁਰੱਖਿਅਤ ਪ੍ਰਮਾਣੀਕਰਣ ਪ੍ਰਣਾਲੀ ਬਣਾਉਣ ਲਈ ਮਜ਼ਬੂਤ ​​​​ਗਲਤੀ ਪ੍ਰਬੰਧਨ ਅਤੇ ਟੈਸਟਿੰਗ ਜ਼ਰੂਰੀ ਹਨ। ਜੇਸਟ ਵਰਗੇ ਟੂਲਸ ਨਾਲ ਯੂਨਿਟ ਟੈਸਟਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨਾ ਇਹ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਕਿ ਹੈਪੀ-ਪਾਥ ਅਤੇ ਕਿਨਾਰੇ ਦੋਵਾਂ ਮਾਮਲਿਆਂ ਨੂੰ ਹੱਲ ਕੀਤਾ ਗਿਆ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਟੈਸਟ ਪ੍ਰਮਾਣਿਤ ਕਰਦੇ ਹਨ ਕਿ ਗਲਤ ਪ੍ਰਮਾਣ ਪੱਤਰ ਅਰਥਪੂਰਨ ਤਰੁਟੀਆਂ ਸੁੱਟਦੇ ਹਨ, ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਗਲਤੀਆਂ ਦੀ ਜਲਦੀ ਪਛਾਣ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦੇ ਹਨ। ਪੂਰਨਤਾ ਦਾ ਇਹ ਪੱਧਰ ਉਪਭੋਗਤਾ ਅਨੁਭਵ ਨੂੰ ਵਧਾਉਂਦਾ ਹੈ ਅਤੇ ਉਤਪਾਦਨ ਵਾਤਾਵਰਨ ਵਿੱਚ ਭਰੋਸੇਯੋਗਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ। ਮਾਡਿਊਲਰ, ਚੰਗੀ ਤਰ੍ਹਾਂ ਟੈਸਟ ਕੀਤੇ, ਅਤੇ ਕਿਨਾਰੇ-ਅਨੁਕੂਲ ਹੱਲਾਂ 'ਤੇ ਧਿਆਨ ਕੇਂਦਰਿਤ ਕਰਕੇ, ਡਿਵੈਲਪਰ Next.js ਵਿੱਚ ਲਚਕੀਲੇ ਅਤੇ ਸਕੇਲੇਬਲ ਪ੍ਰਮਾਣੀਕਰਨ ਸਿਸਟਮ ਬਣਾ ਸਕਦੇ ਹਨ।

  1. Next.js ਵਿੱਚ ਐਜ ਰਨਟਾਈਮ ਕੀ ਹੈ?
  2. ਐਜ ਰਨਟਾਈਮ ਘੱਟ-ਲੇਟੈਂਸੀ ਐਪਲੀਕੇਸ਼ਨਾਂ ਲਈ ਅਨੁਕੂਲਿਤ ਇੱਕ ਹਲਕਾ ਵਾਤਾਵਰਣ ਹੈ। ਹਾਲਾਂਕਿ, ਇਸ ਵਿੱਚ ਕੁਝ Node.js ਮੋਡੀਊਲਾਂ 'ਤੇ ਪਾਬੰਦੀਆਂ ਹਨ, ਜਿਵੇਂ 'crypto'।
  3. MongoDB Auth.js ਨਾਲ ਸਮੱਸਿਆਵਾਂ ਕਿਉਂ ਪੈਦਾ ਕਰਦਾ ਹੈ?
  4. MongoDBAdapter ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਸਮੇਂ, ਕਿਨਾਰੇ-ਅਨੁਕੂਲ ਵਾਤਾਵਰਣਾਂ ਵਿੱਚ ਸਿੱਧਾ ਡਾਟਾਬੇਸ ਕਨੈਕਸ਼ਨ ਰਨਟਾਈਮ ਸੀਮਾਵਾਂ ਨਾਲ ਟਕਰਾ ਸਕਦਾ ਹੈ। MongoDB ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਇੱਕ ਗਲੋਬਲ clientPromise ਵਿੱਚ ਸਮੇਟਣਾ ਇਸ ਮੁੱਦੇ ਨੂੰ ਹੱਲ ਕਰਦਾ ਹੈ।
  5. ਕਿਵੇਂ ਕਰਦਾ ਹੈ ਸਕ੍ਰਿਪਟਾਂ ਵਿੱਚ ਕੰਮ ਕਰਦੇ ਹੋ?
  6. ਇਹ ਫੰਕਸ਼ਨ ਪ੍ਰਮਾਣਿਕਤਾ ਲਈ ਹੈਸ਼ ਕੀਤੇ ਪਾਸਵਰਡਾਂ ਨਾਲ ਪਲੇਨ ਟੈਕਸਟ ਪਾਸਵਰਡ ਦੀ ਤੁਲਨਾ ਕਰਦਾ ਹੈ, ਸੁਰੱਖਿਅਤ ਉਪਭੋਗਤਾ ਪ੍ਰਮਾਣਿਕਤਾ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ।
  7. JWT ਸੈਸ਼ਨ ਰਣਨੀਤੀ ਦੀ ਵਰਤੋਂ ਕਰਨ ਦਾ ਕੀ ਫਾਇਦਾ ਹੈ?
  8. JWT-ਅਧਾਰਿਤ ਸੈਸ਼ਨ ਸੈਸ਼ਨ ਡੇਟਾ ਨੂੰ ਕਲਾਇੰਟ 'ਤੇ ਸੁਰੱਖਿਅਤ ਢੰਗ ਨਾਲ ਸਟੋਰ ਕਰਦੇ ਹਨ, ਸਰਵਰ ਨਿਰਭਰਤਾ ਨੂੰ ਘਟਾਉਂਦੇ ਹਨ ਅਤੇ ਸਕੇਲੇਬਿਲਟੀ ਵਿੱਚ ਸੁਧਾਰ ਕਰਦੇ ਹਨ।
  9. ਮੈਂ ਪ੍ਰਮਾਣੀਕਰਨ ਤਰਕ ਦੀ ਜਾਂਚ ਕਿਵੇਂ ਕਰ ਸਕਦਾ ਹਾਂ?
  10. ਵੈਧ ਅਤੇ ਅਵੈਧ ਪ੍ਰਮਾਣ ਪੱਤਰਾਂ ਲਈ ਯੂਨਿਟ ਟੈਸਟ ਲਿਖਣ ਲਈ Jest ਦੀ ਵਰਤੋਂ ਕਰੋ। ਉਦਾਹਰਨ ਲਈ, ਨਕਲੀ ਡੇਟਾਬੇਸ ਕਾਲਾਂ ਅਤੇ ਗਲਤੀ-ਪ੍ਰਬੰਧਨ ਪ੍ਰਵਾਹ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰੋ।

Edge-ਅਨੁਕੂਲ ਵਾਤਾਵਰਣ ਵਿੱਚ MongoDB ਦੇ ਨਾਲ NextAuth ਨੂੰ ਏਕੀਕ੍ਰਿਤ ਕਰਨ ਲਈ ਰਨਟਾਈਮ ਗਲਤੀਆਂ ਤੋਂ ਬਚਣ ਲਈ ਸੋਚ-ਸਮਝ ਕੇ ਡਿਜ਼ਾਈਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। ਮਾਡਿਊਲਰ ਢਾਂਚੇ ਨੂੰ ਅਪਣਾਉਣਾ ਸਹਿਜ ਡੇਟਾਬੇਸ ਕਨੈਕਟੀਵਿਟੀ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦਾ ਹੈ ਅਤੇ ਡੀਬਗਿੰਗ ਨੂੰ ਸਰਲ ਬਣਾਉਂਦਾ ਹੈ। ਗਲਤੀ ਨਾਲ ਨਜਿੱਠਣ ਅਤੇ ਯੂਨਿਟ ਟੈਸਟਿੰਗ 'ਤੇ ਜ਼ੋਰ ਦੇਣਾ ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਸੁਰੱਖਿਆ ਨੂੰ ਹੋਰ ਵਧਾਉਂਦਾ ਹੈ। 💡

ਅੰਤ ਵਿੱਚ, ਇੱਕ ਸੁਰੱਖਿਅਤ, ਸਕੇਲੇਬਲ ਸਿਸਟਮ ਦਾ ਨਿਰਮਾਣ ਰਨਟਾਈਮ ਦੀਆਂ ਰੁਕਾਵਟਾਂ ਨੂੰ ਸਿੱਧੇ ਤੌਰ 'ਤੇ ਹੱਲ ਕਰਕੇ ਅਤੇ ਆਧੁਨਿਕ ਫਰੇਮਵਰਕ ਲਈ ਵਧੀਆ ਅਭਿਆਸਾਂ ਨੂੰ ਲਾਗੂ ਕਰਕੇ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ। ਡਿਵੈਲਪਰ ਆਮ ਕਮੀਆਂ ਨੂੰ ਦੂਰ ਕਰਨ ਅਤੇ ਉਪਭੋਗਤਾ ਪ੍ਰਮਾਣੀਕਰਨ ਪ੍ਰਵਾਹ ਨੂੰ ਵਧਾਉਣ ਲਈ ਇਹਨਾਂ ਰਣਨੀਤੀਆਂ ਨੂੰ ਭਰੋਸੇ ਨਾਲ ਵਰਤ ਸਕਦੇ ਹਨ। ਇਹਨਾਂ ਹੱਲਾਂ ਦੇ ਨਾਲ, ਤੁਹਾਡੀ ਐਪਲੀਕੇਸ਼ਨ ਸਾਰੇ ਵਾਤਾਵਰਣਾਂ ਵਿੱਚ ਭਰੋਸੇਯੋਗ ਢੰਗ ਨਾਲ ਪ੍ਰਦਰਸ਼ਨ ਕਰੇਗੀ।

  1. 'ਤੇ ਵਿਸਤ੍ਰਿਤ ਦਸਤਾਵੇਜ਼ NextAuth.js , Next.js ਵਿੱਚ ਪ੍ਰਮਾਣਿਕਤਾ ਰਣਨੀਤੀਆਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ।
  2. ਤੋਂ ਐਜ ਰਨਟਾਈਮ ਰੁਕਾਵਟਾਂ ਨੂੰ ਸੰਭਾਲਣ ਲਈ ਮਾਰਗਦਰਸ਼ਨ Next.js ਐਜ ਰਨਟਾਈਮ API ਦਸਤਾਵੇਜ਼ .
  3. ਤੋਂ ਸਰਵਰ ਰਹਿਤ ਵਾਤਾਵਰਣਾਂ ਵਿੱਚ ਮੋਂਗੋਡੀਬੀ ਕਨੈਕਸ਼ਨਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰਨ ਦੀ ਸੂਝ ਮੋਂਗੋਡੀਬੀ ਅਧਿਕਾਰਤ ਦਸਤਾਵੇਜ਼ .
  4. ਪਾਸਵਰਡ ਹੈਸ਼ਿੰਗ ਅਤੇ ਪ੍ਰਮਾਣਿਕਤਾ ਦੀ ਵਰਤੋਂ ਕਰਨ ਲਈ ਤਕਨੀਕਾਂ bcrypt.js GitHub ਰਿਪੋਜ਼ਟਰੀ .
  5. ਦੁਆਰਾ ਪ੍ਰਦਾਨ ਕੀਤੇ ਗਏ ਪ੍ਰਮਾਣਿਕਤਾ ਪ੍ਰਵਾਹਾਂ ਦੀ ਜਾਂਚ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਅਭਿਆਸ ਜੈਸਟ ਦਸਤਾਵੇਜ਼ .