Next.js项目中如何实现Warpcast登录功能?

72 阅读2分钟

在Next.js项目中实现Warpcast登录功能,需要安装auth-kit及其依赖viem,具体登录步骤如下:

  1. 安装auth-kit及依赖项viem npm install @farcaster/auth-kit viem

  2. 在_app.tsx文件中,导入CSS样式和AuthKitProvider上下文提供者,使得在整个应用的任何子组件中都能使用Farcaster提供的hooks来访问登录状态、执行登录/登出操作等。AuthKitProvider需要提供一个config配置属性,具体如下:

import '@farcaster/auth-kit/styles.css'
import { AuthKitProvider } from '@farcaster/auth-kit'
import type { AppProps } from 'next/app'

const config = { 
    rpcUrl: 'https://mainnet.optimism.io', 
    domain: 'example.com', 
    siweUri: 'https://example.com/login', 
}

const App = ({ Component, pageProps }: AppProps) => {
    return (
        <AuthKitProvider config={config}>
            <Component {...pageProps} />
        </AuthKitProvider>
    )
};

export default App;

在config配置对象中,其中:
rpcUrl: 一个RPC URL,允许我们的应用程序向区块链节点发送请求和接收响应
domain: 这是应用程序的域名
siweUri: 处理认证流程的服务器端点,当用户尝试登录时,认证过程会向这个 URL 发送请求

  1. 在page.tsx中,从@farcaster/auth-kit按需导入SignInButton登录按钮组件,具体如下:
import { SignInButton, type StatusAPIResponse } from '@farcaster/auth-kit'

const LoginButton = () => {

    const handleSuccess = (res: StatusAPIResponse) => {
        const { custody, fid, message, nonce, signature } = res
        // 调用登录接口
        // do something...
    }

    return (
        <>
            <SignInButton 
                onSuccess={(res) => handleSuccess(res)}
            />
        </>
    )
}

export default LoginButton

SignIn.png
这样点击Sign in按钮就会弹出登录二维码,如下图:
SignIn.png

  1. 当用户扫码登录成功后,就会触发SignInButton登录按钮组件的onSuccess回调,该回调函数接收一个包含用户认证信息的对象作为参数,提取custody, fid, message, nonce, signature字段作为登录参数传给服务端

  2. 服务端根据前端传递过来的custody, fid, message, nonce, signature参数进行签名验证并生成唯一的认证令牌token并返回给前端

  3. 前端拿到服务端返回的token和按需对SignInButton登录按钮组件的onSuccess回调返回的用户信息进行持久化存储,并在后续的请求中,将token添加到请求头(Authentication)中,以便服务器验证token授权请求