Solana로 로그인 - Phantom Wallet으로 사용자 인증

10399 단어 authweb3thirdwebsolana

소개



이 가이드에서는 thirdweb 인증을 사용하여 Solana를 사용한 로그인을 Dapps에 추가할 것입니다!

시작하기 전에 이 가이드에서 사용할 도구에 대해 자세히 알아볼 수 있는 몇 가지 유용한 리소스가 아래에 나와 있습니다.
  • View project source code
  • Solana SDK
  • Getting Started with Solana

  • 시작하자!

    web3 로그인을 사용하는 이유는 무엇입니까?



    Solana로 로그인하면 지갑을 사용하여 안전하게 로그인하고 백엔드에서 지갑을 확인할 수 있습니다! 매우 인기 있는 JWT 표준을 사용하는 Thirdweb Auth를 사용할 것입니다! JWT(JSON Web Token)는 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의하는 개방형 표준입니다.

    설정



    Next.js 앱 만들기



    이 안내서에는 Next typescript solana starter template을 사용하겠습니다.

    가이드를 따라가는 경우 다음을 사용하여 프로젝트를 만들 수 있습니다.
    Next TypeScript template thirdweb CLI 사용:

    npx thirdweb create --template next-typescript-solana-starter
    


    Next.js 앱이 이미 있는 경우 다음 단계에 따라 시작할 수 있습니다.
  • thirdweb SDK 설치: @thirdweb-dev/react@thirdweb-dev/sdk
  • solana 지갑 어댑터용 패키지 설치: @solana/wallet-adapter-react , @solana/wallet-adapter-react-ui@solana/wallet-adapter-wallets .
  • ThirdwebProviderWalletModalProviderapp 을 래핑합니다.

  • thirdweb 인증 설정



    먼저 thirdweb 인증 패키지를 설치해야 합니다.

    npm i @thirdweb-dev/auth # npm
    
    yarn add @thirdweb-dev/auth # yarn
    


    이제 auth.config.ts라는 파일과 다음을 생성합니다.

    import { ThirdwebAuth } from "@thirdweb-dev/auth/next";
    
    export const { ThirdwebAuthHandler, getUser } = ThirdwebAuth({
      privateKey: process.env.PRIVATE_KEY as string,
      domain: "example.org",
    });
    


  • 도메인을 도메인으로 업데이트합니다.
  • 지갑의 개인 키가 필요합니다. 따라서 팬텀 지갑으로 이동하여(아직 만들지 않은 경우 this guide 확인) 오른쪽 상단 배지를 클릭하고 지갑을 선택하십시오. 그런 다음 개인 키 내보내기 버튼을 클릭합니다:



  • 이 개인 키를 복사하고 다음 형식으로 새 파일 .env에 붙여넣습니다.

    PRIVATE_KEY=<your-private-key>
    


    개인 키를 env 변수로 사용하는 것은 공격에 취약하며 모범 사례가 아닙니다. 간결함을 위해 이 가이드에서 그렇게 하고 있지만 secret manager to store your private key 을 사용하는 것이 좋습니다.

    인증 api를 구성하려면 auth라는 새 폴더pages/api와 그 안에 파일[...thirdweb].ts을 만듭니다! 여기서 우리는 우리가 만든 thirdwebHandler를 내보내야 합니다!

    import { ThirdwebAuth } from "@thirdweb-dev/auth/next/solana";
    
    export const { ThirdwebAuthHandler, getUser } = ThirdwebAuth({
      privateKey: process.env.PRIVATE_KEY as string,
      domain: "example.org",
    });
    


    마지막으로 _app.tsx 파일 내에서 authConfig 소품을 ThirdwebProvider에 추가합니다.

      <ThirdwebProvider
          network={network}
          authConfig={{
            authUrl: "/api/auth",
            domain: "example.org",
            loginRedirect: "/",
          }}
        >
          <WalletModalProvider>
            <Component {...pageProps} />
          </WalletModalProvider>
        </ThirdwebProvider>
    


    프런트엔드 구축



    내부pages/index.tsx는 다음과 같이 return 문을 업데이트합니다.

    return (
      <div>
        {publicKey ? (
          <button onClick={() => login()}>Sign in with Solana</button>
        ) : (
          <WalletMultiButton />
        )}
      </div>
    );
    

    useWalletuseLogin 후크를 사용하여 로그인 기능과 사용자 주소를 가져옵니다.

    const { publicKey } = useWallet();
    const login = useLogin();
    


    다음과 같이 이러한 후크를 가져와야 합니다.

    import { useWallet } from "@solana/wallet-adapter-react";
    import { useLogin, useUser } from "@thirdweb-dev/react/solana";
    


    이렇게 하면 Solana를 사용한 로그인이 사이트에 추가됩니다! 이제 사용자가 존재하는지 확인해야 합니다. 이를 위해 다음과 같이 useUser 후크에서 사용자를 가져옵니다.

    const { user } = useUser();
    


    그리고 사용자가 존재하는지 확인하고 존재한다면 다음을 반환합니다.

    if (user) {
      return (
        <div className={styles.container}>
          <p>You are signed in as {user.address}</p>
          <button onClick={validateUser}>Validate user</button>
        </div>
      );
    }
    


    유효성 검사를 위한 API 생성



    이제 백엔드에서 사용자 세부 정보(주소)를 가져오는 API를 만들어 봅시다! 따라서 validate.ts 안에 pages/api라는 새 파일을 만들고 다음을 추가합니다.

    import type { NextApiRequest, NextApiResponse } from "next";
    import { getUser } from "../../auth.config";
    
    const handler = async (req: NextApiRequest, res: NextApiResponse) => {
      if (req.method === "POST") {
        const thirdwebUser = await getUser(req);
    
        if (thirdwebUser?.address) {
          return res.status(200).json({
            message: `You are signed in as ${thirdwebUser.address}`,
          });
        }
        return res.status(401).json({ message: "Account not validated" });
      }
      return res.status(405).json({ message: "Method not allowed" });
    };
    
    export default handler;
    


    여기서는 thirdweb의 getUser 메서드를 사용하여 사용자의 주소를 가져오고, 주소가 있는 경우 "당신은 주소로 로그인했습니다"라는 메시지를 보냅니다.

    프런트엔드에서 API 호출



    다음과 같이 validateUserpages/index.tsx라는 새 함수를 만듭니다.

    const validateUser = async () => {
      try {
        const response = await fetch("/api/validate", {
          method: "POST",
        });
    
        const data = await response.json();
        alert(data.message);
      } catch (error) {
        console.log(error);
      }
    };
    


    그리고 이 함수를 유효성 검사 버튼의 onClick에 연결합니다.

    <button onClick={validateUser}>Validate user</button>
    


    결론



    이 가이드에서는 thirdweb auth를 사용하여 solana로 로그인을 추가하는 방법을 배웠습니다. thirdweb discord에서 solana로 로그인하여 구축한 멋진 Dapps를 공유하세요! 코드를 살펴보고 싶다면 GitHub Repository 을 확인하십시오.

    좋은 웹페이지 즐겨찾기