Rainbow logo
RainbowKit
2.2.10

المصادقة المخصصة

المصادقة المخصصة

الاتصال بخادم استيثاق خلفي خاص بك

بينما يوفر RainbowKit دعماً عالي المستوى لتسجيل الدخول بإستخدام إثريوم وNextAuth، يمكنك أيضًا التكامل مع الواجهات الخلفية والتنسيقات المخصصة للرسائل.

أولاً، أنشئ محول استيثاق. هذا يسمح ل RainbowKit بإنشاء/تحضير الرسائل والتواصل مع خادم الاستيثاق الخلفي الخاص بك.

كمثال، يمكننا صنع محول استيثاق يسمح لنا باستخدام تسجيل الدخول باستخدام إثريوم مع بعض نقاط نهاية API المخصصة، مثل iron-session.

import { createAuthenticationAdapter } from '@rainbow-me/rainbowkit';
import { createSiweMessage } from 'viem/siwe';
const authenticationAdapter = createAuthenticationAdapter({
getNonce: async () => {
const response = await fetch('/api/nonce');
return await response.text();
},
createMessage: ({ nonce, address, chainId }) => {
return createSiweMessage({
domain: window.location.host,
address,
statement: 'Sign in with Ethereum to the app.',
uri: window.location.origin,
version: '1',
chainId,
nonce,
});
},
verify: async ({ message, signature }) => {
const verifyRes = await fetch('/api/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ message, signature }),
});
return Boolean(verifyRes.ok);
},
signOut: async () => {
await fetch('/api/logout');
},
});

على افتراض أن تطبيقك يدير بالفعل دورة حياة الاستيثاق بطريقة معينة، يمكنك تمرير حالة الاستيثاق الحالية مع مزود المحول المخصص الخاص بك إلى RainbowKitAuthenticationProvider، تغليف مزود RainbowKit الحالي الخاص بك.

import { createAuthenticationAdapter, RainbowKitAuthenticationProvider, RainbowKitProvider, } from '@rainbow-me/rainbowkit';
import { AppProps } from 'next/app';
import { WagmiProvider } from 'wagmi';
import { QueryClientProvider, QueryClient, } from "@tanstack/react-query";
const authenticationAdapter = createAuthenticationAdapter({
/* See above... */
});
const queryClient = new QueryClient();
export default function App({ Component, pageProps }: AppProps) {
// You'll need to resolve AUTHENTICATION_STATUS here
// using your application's authentication system.
// It needs to be either 'loading' (during initial load),
// 'unauthenticated' or 'authenticated'.
return (
<WagmiProvider {...etc}>
<QueryClientProvider client={queryClient}>
<RainbowKitAuthenticationProvider adapter={authenticationAdapter} status={AUTHENTICATION_STATUS} >
<RainbowKitProvider {...etc}>
<Component {...pageProps} />
</RainbowKitProvider>
</RainbowKitAuthenticationProvider>
</QueryClientProvider>
</WagmiProvider>
);
}

إذا وصلت إلى هذه النقطة وقمت بإنشاء محول لمكتبة استيثاق مفتوحة المصدر موجودة، نرجو منك النظر في إنشاء حزمة ليستخدمها الآخرون!