thirdweb으로 web3 로그인을 추가하는 방법 ✨

5984 단어 web3auththirdweb

소개



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



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

설정



Next.js 앱 만들기



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

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

npx thirdweb create --next --ts

Next.js 앱이 이미 있는 경우 다음 단계에 따라 시작할 수 있습니다.
  • 설치 @thirdweb-dev/react@thirdweb-dev/sdkethers
  • 사이트에 MetaMask 인증을 추가합니다. 이 작업을 수행하려면 다음guide을 따르십시오.

  • 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",
    });
    

    웹사이트 URL로 도메인을 업데이트하고 개인 키에 대해 새 .env.local 파일을 만들고 이름이 PRIVATE_KEY 인 새 변수를 추가합니다. 지갑에서 export your private key 방법을 알아보세요.

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

    import { ThirdwebAuthHandler } from "../../../auth.config";
    
    export default ThirdwebAuthHandler();
    

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

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

    프런트엔드 구축



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

    return (
        <div>
          {address ? (
            <button onClick={() => login()}>
              Sign in with Ethereum
            </button>
          ) : (
            <ConnectWallet />
          )}
        </div>
      );
    
    useAddressuseLogin 후크를 사용하여 로그인 기능과 사용자 주소를 가져옵니다.

      const address = useAddress();
      const login = useLogin();
    

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

      const user = useUser();
    

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

    if (user.user) {
      return (
        <div>
          <p>You are signed in as {user.user.address}</p>
          <button>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 호출



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

      const handleClick = 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={handleClick}>Validate user</button>
    







    결론



    이 가이드를 통해 놀라운 Dapps에 web3 로그인을 추가하는 방법을 배웠기를 바랍니다!

    유용한 링크



    GitHub repo

    Thirdweb Auth

    좋은 웹페이지 즐겨찾기