Rainbow logo
RainbowKit
2.2.11

प्रमाणीकरण

प्रमाणीकरण

अपने आवेदन के लिए प्रमाणित पहुंच प्रदान करना

आप विकल्पतः यह सुनिश्चित कर सकते हैं कि उपयोगकर्ताएं संबंधन प्रक्रिया के दौरान अपने वॉलेट के साथ संदेश पर हस्ताक्षर करते हैं, जिससे साबित होता है कि वे संबद्ध खाते के मालिक हैं और आपको अपने आवेदन के लिए विशेषाधिकार सहित प्रमाणित उपयोगकर्ता सत्र बनाने की अनुमति देते हैं।

जबकि [कस्टम बैक-एंड्स और मेसेज फॉर्मेट्स के साथ एकीकृत करने] की संभवना होती है, (/docs/custom-authentication) RainbowKit Sign-In with Ethereum और NextAuth के लिए प्रथम वर्ग का समर्थन प्रदान करता है।

@rainbow-me/rainbowkit-siwe-next-auth पैकेज और NextAuth v5 को इनस्टॉल करें।

npm install @rainbow-me/rainbowkit-siwe-next-auth [email protected]

यदि आप मौजूदा NextAuth v4 SIWE इंटीग्रेशन को अपग्रेड कर रहे हैं, तो NextAuth v5 माइग्रेशन गाइड का अनुसरण करें।

एक NextAuth कॉन्फ़िगरेशन बनाएं जो v5 Credentials प्रदाता का उपयोग करता है और auth हेल्पर को निर्यात करता है। आपका authorize कार्यान्वयन SIWE संदेश, हस्ताक्षर, डोमेन, और नॉनस को मान्य करना चाहिए, इससे पहले कि प्रमाणीकरण पता लौटाए।

import NextAuth from 'next-auth';
import type { NextAuthConfig } from 'next-auth';
import Credentials from 'next-auth/providers/credentials';
export const authOptions: NextAuthConfig = {
providers: [
Credentials({
name: 'Ethereum',
credentials: {
message: { label: 'Message', type: 'text' },
signature: { label: 'Signature', type: 'text' },
},
async authorize(credentials) {
const siweMessage = await validateSiweCredentials(credentials);
if (!siweMessage) {
return null;
}
return {
id: siweMessage.address,
};
},
}),
],
secret: process.env.AUTH_SECRET ?? process.env.NEXTAUTH_SECRET,
session: {
strategy: 'jwt',
},
};
export const { handlers, auth, signIn, signOut } = NextAuth(authOptions);

SIWE मान्यता, नॉनस चेक और सर्वर-साइड सत्यापन के लिए पूरा with-next-siwe-next-auth उदाहरण देखें।

अपने App घटक में, RainbowKitSiweNextAuthProvider आयात करें।

import { RainbowKitSiweNextAuthProvider } from '@rainbow-me/rainbowkit-siwe-next-auth';

RainbowKitSiweNextAuthProvider के साथ RainbowKitProvider लपेटें, यह सुनिश्चित करते हुए कि यह NextAuth के SessionProvider के भीतर नेस्ट किया गया है ताकि इसे सत्र तक पहुँच प्राप्त हो।

import { RainbowKitSiweNextAuthProvider } from '@rainbow-me/rainbowkit-siwe-next-auth';
import { RainbowKitProvider } from '@rainbow-me/rainbowkit';
import { SessionProvider } from 'next-auth/react';
import type { Session } from 'next-auth';
import { AppProps } from 'next/app';
import { WagmiProvider } from 'wagmi';
import { QueryClient, QueryClientProvider, } from '@tanstack/react-query';
const queryClient = new QueryClient();
export default function App({
Component,
pageProps,
}: AppProps<{
session: Session;
}>) {
return (
<WagmiProvider {...etc}>
<SessionProvider refetchInterval={0} session={pageProps.session}>
<QueryClientProvider client={queryClient}>
<RainbowKitSiweNextAuthProvider>
<RainbowKitProvider {...etc}>
<Component {...pageProps} />
</RainbowKitProvider>
</RainbowKitSiweNextAuthProvider>
</QueryClientProvider>
</SessionProvider>
</WagmiProvider>
);
}

RainbowKitSiweNextAuthProvider के स्थान पर होने के साथ, आपके उपयोगकर्ताओं से अब एक संदेश को साइन करके प्रमाणित होने के लिए प्रेरित किया जाएगा, एक बार जब उन्होंने अपना वॉलेट कनेक्ट कर लिया।

आप RainbowKitSiweNextAuthProvider पर getSiweMessageOptions प्रॉप के लिए एक फ़ंक्शन पास करके SIWE संदेश विकल्पों को अनुकूलित कर सकते हैं।

जब भी एक नया संदेश बनाया जाता है तो यह फ़ंक्शन कॉल किया जाएगा। इस फ़ंक्शन से लौटाए गए विकल्प डिफ़ॉल्ट के साथ विलय हो जाएंगे।

import { RainbowKitSiweNextAuthProvider, GetSiweMessageOptions, } from '@rainbow-me/rainbowkit-siwe-next-auth';
const getSiweMessageOptions: GetSiweMessageOptions = () => ({
statement: 'Sign in to my RainbowKit app',
});
<RainbowKitSiweNextAuthProvider getSiweMessageOptions={getSiweMessageOptions} >
...
</RainbowKitSiweNextAuthProvider>;

आपके ऑथ कॉन्फ़िगरेशन से निर्यात किए गए auth फ़ंक्शन का उपयोग करके सत्र तक पहुंच सकते हैं। यदि उपयोगकर्ता ने सफलतापूर्वक प्रमाणीकरण कर लिया है, तो सत्र की address संपत्ति उपयोगकर्ता का पता होगा।

आप getServerSideProps के माध्यम से सर्वर से हल किया गया सत्र ऑब्जेक्ट भी पास कर सकते हैं ताकि NextAuth को इसे फिर से क्लाइंट पर हल करने की आवश्यकता न हो।

उदाहरण के लिए:

import { GetServerSideProps, InferGetServerSidePropsType } from 'next';
import { auth } from '../auth';
export const getServerSideProps: GetServerSideProps = async context => {
const session = await auth(context.req, context.res);
const address = session?.address ?? null;
// If you have a value for "address" here, your
// server knows the user is authenticated.
// You can then pass any data you want
// to the page component here.
return {
props: {
address,
session,
},
};
};
type AuthenticatedPageProps = InferGetServerSidePropsType<
typeof getServerSideProps
>;
export default function AuthenticatedPage({
address,
}: AuthenticatedPageProps) {
return address ? (
<h1>Authenticated as {address}</h1>
) : (
<h1>Unauthenticated</h1>
);
}

सत्र प्रबंधन के बारे में अधिक जानकारी के लिए, आप निम्नलिखित प्रलेखन का संदर्भ ले सकते हैं: