المصادقة
المصادقة
تقديم الوصول المصادق عليه إلى تطبيقك
يمكنك اختياريًا إجبار المستخدمين على التوقيع على رسالة باستخدام محفظتهم خلال عملية الاتصال، مما يثبت أنهم يملكون الحساب المتصل ويتيح لك إنشاء جلسة مستخدم مصادق عليها تتمتع بالوصول المميز إلى تطبيقك.
بينما يمكن الدمج مع خلفيات مخصصة وتنسيقات الرسائل، يوفر 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;
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>
);
}
لمزيد من المعلومات حول إدارة الجلسة، يمكنك الرجوع إلى الوثائق التالية: