Solana로 로그인 - Phantom Wallet으로 사용자 인증
소개
이 가이드에서는 thirdweb 인증을 사용하여 Solana를 사용한 로그인을 Dapps에 추가할 것입니다!
시작하기 전에 이 가이드에서 사용할 도구에 대해 자세히 알아볼 수 있는 몇 가지 유용한 리소스가 아래에 나와 있습니다.
시작하자!
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-dev/react
및 @thirdweb-dev/sdk
@solana/wallet-adapter-react
, @solana/wallet-adapter-react-ui
및 @solana/wallet-adapter-wallets
. ThirdwebProvider
및 WalletModalProvider
에 app 을 래핑합니다. 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",
});
이 개인 키를 복사하고 다음 형식으로 새 파일 .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>
);
useWallet
및 useLogin
후크를 사용하여 로그인 기능과 사용자 주소를 가져옵니다.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 호출
다음과 같이
validateUser
에 pages/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 을 확인하십시오.
Reference
이 문제에 관하여(Solana로 로그인 - Phantom Wallet으로 사용자 인증), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thirdweb/sign-in-with-solana-authenticate-users-with-their-phantom-wallet-4b21텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)