Rainbow logo
RainbowKit
2.2.4

المصادقة

المصادقة

تقديم الوصول المصادق عليه إلى تطبيقك

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

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

قم بتثبيت حزمة @rainbow-me/rainbowkit-siwe-next-auth.

npm install @rainbow-me/rainbowkit-siwe-next-auth

في مكون App الخاص بك، قم باستيراد RainbowKitSiweNextAuthProvider.

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

قم بلف RainbowKitProvider بـ RainbowKitSiweNextAuthProvider، مع التأكد من تغليفه ضمن SessionProvider الخاص بـ NextAuth حتى يتمكن من الوصول إلى الجلسة.

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 { QueryClientProvider, QueryClient, } 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 في مكانه، سيتم الآن مطالبة المستخدمين بالمصادقة من خلال توقيع رسالة بمجرد اتصالهم بمحفظتهم.

يمكنك تخصيص خيارات رسالة SIWE عن طريق تمرير وظيفة إلى الدالة getSiweMessageOptions prop على RainbowKitSiweNextAuthProvider.

سيتم استدعاء هذه الوظيفة كلما تم إنشاء رسالة جديدة. سيتم دمج الخيارات المسترجعة من هذه الوظيفة مع القيم الافتراضية.

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

يمكنك الوصول إلى رمز الجلسة باستخدام وظيفة getToken من NextAuth المستوردة من next-auth/jwt. إذا تم التحقق من المستخدم بنجاح، ستكون خاصية sub (ال"الموضوع" للرمز، أي المستخدم) لرمز الجلسة عنوان المستخدم.

يمكنك أيضاً تمرير كائن الجلسة المحلول من الخادم عبر getServerSideProps بحيث لا يحتاج NextAuth إلى حله مرة أخرى على العميل.

على سبيل المثال:

import { GetServerSideProps, InferGetServerSidePropsType } from 'next';
import { getSession } from 'next-auth/react';
import { getToken } from 'next-auth/jwt';
import React from 'react';
export const getServerSideProps: GetServerSideProps = async context => {
const session = await getSession(context);
const token = await getToken({ req: context.req });
const address = token?.sub ?? 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>
);
}

لمزيد من المعلومات حول إدارة الجلسة، يمكنك الرجوع إلى الوثائق التالية: