在Next.js项目中实现Warpcast登录功能,需要安装auth-kit及其依赖viem,具体登录步骤如下:
-
安装auth-kit及依赖项viem
npm install @farcaster/auth-kit viem -
在_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 发送请求
- 在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
这样点击Sign in按钮就会弹出登录二维码,如下图:
-
当用户扫码登录成功后,就会触发
SignInButton登录按钮组件的onSuccess回调,该回调函数接收一个包含用户认证信息的对象作为参数,提取custody, fid, message, nonce, signature字段作为登录参数传给服务端 -
服务端根据前端传递过来的custody, fid, message, nonce, signature参数进行签名验证并生成唯一的认证令牌token并返回给前端
-
前端拿到服务端返回的token和按需对
SignInButton登录按钮组件的onSuccess回调返回的用户信息进行持久化存储,并在后续的请求中,将token添加到请求头(Authentication)中,以便服务器验证token授权请求