Flutter社交登录插件siwe_flutter的使用
Flutter社交登录插件siwe_flutter的使用
Sign-In with Ethereum
是一种认证方式,它允许用户通过他们的以太坊账户和ENS配置文件来控制其数字身份,而不是依赖传统的中介。SIWE Flutter
是一个Flutter插件,可以让你在Flutter应用中集成SIWE认证。
插件的功能
该插件是用于你应用前端的SIWE实现。它允许你:
- 使用WalletConnect初始化并连接钱包提供者。
- 使用用户的以太坊钱包创建并签署SIWE消息。
- 将SIWE消息发送到后端服务器进行验证。
有关SIWE如何工作的更多细节,请参阅SIWE文档。
开始使用
有以下两种方式使用插件:一种是使用默认提供者(walletconnect),另一种是自己提供提供者。我们建议使用默认提供者,因为它更易于使用且整体上需要较少的设置时间。请查看示例应用,了解使用默认提供者的插件工作示例。
使用默认提供者
-
初始化并连接钱包提供者
initializeEthereumProvider(BuildContext context, String bridge, String name, String description, String url, String icon)
context
是必需的,以便将弹出窗口显示在屏幕上。其余参数是初始化WalletConnect提供者的必要参数。 -
从后端服务器获取随机数
getNonce(String url)
-
签署SIWE消息
signInWithEthereum( String domain, String statement, String uri, String version, String chainId)
-
验证消息
verifyMessage(String url)
使用自己的提供者
-
初始化自己的提供者。
-
从后端服务器获取随机数
getNonce(String url)
-
使用
createExternalMessage()
创建一条消息createExternalMessage(String domain, String statement, String uri, String version, String chainId)
-
使用
personal sign message
签名消息,并使用createExternalMessage()
返回的消息。
完整示例Demo
import 'package:flutter/material.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:siwe_flutter/library.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('en', 'US'), // 英语
// ... 其他支持的语言
],
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Center(
child: _ConnectWalletButton(),
),
),
);
}
}
class _ConnectWalletButton extends StatefulWidget {
[@override](/user/override)
__ConnectWalletButtonState createState() => __ConnectWalletButtonState();
}
class __ConnectWalletButtonState extends State<_ConnectWalletButton> {
[@override](/user/override)
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: () async {
// 首先初始化提供者,必须提供context。
await initializeEthereumProvider(
context,
"https://bridge.walletconnect.org",
'MoonGate',
'An example app showcasing Sign in With Ethereum',
'localhost:3000',
'https://www.joinef.com/wp-content/uploads/2023/03/MoonGate-5-Praneet-Sinha-700x700.png',
);
// 从SIWE后端获取随机数。
await getNonce("http://192.168.0.30:3001/api/nonce");
// 使用以太坊登录。
await signInWithEthereum(
'localhost:3000', 'I love pizza', 'localhost:3000', '1', '1');
// 验证签名。
await verifyMessage('http://192.168.0.30:3001/verify');
},
child: Text('连接钱包'),
);
}
}
更多关于Flutter社交登录插件siwe_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter社交登录插件siwe_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
siwe_flutter
是一个用于在 Flutter 应用中实现 Sign-In with Ethereum (SIWE) 登录的插件。SIWE 是一种基于以太坊的身份验证协议,允许用户使用他们的以太坊钱包(如 MetaMask)进行登录。
以下是如何在 Flutter 项目中使用 siwe_flutter
插件的步骤:
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 siwe_flutter
插件的依赖:
dependencies:
flutter:
sdk: flutter
siwe_flutter: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来获取依赖。
2. 配置插件
在 main.dart
中初始化 siwe_flutter
插件:
import 'package:flutter/material.dart';
import 'package:siwe_flutter/siwe_flutter.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await SiweFlutter.initialize();
runApp(MyApp());
}
3. 创建登录界面
接下来,创建一个简单的登录界面,用户可以通过点击按钮使用 SIWE 进行登录。
import 'package:flutter/material.dart';
import 'package:siwe_flutter/siwe_flutter.dart';
class LoginScreen extends StatelessWidget {
Future<void> _signInWithEthereum(BuildContext context) async {
try {
final siweMessage = await SiweFlutter.signIn(
domain: 'yourdomain.com', // 你的域名
statement: 'Sign in with Ethereum to the app.', // 登录声明
uri: 'https://yourdomain.com/login', // 登录URI
version: '1', // 版本
chainId: 1, // 链ID (1 for Ethereum Mainnet)
);
// 处理登录成功的逻辑
print('Signed in with Ethereum: ${siweMessage.address}');
// 导航到主页或其他界面
Navigator.pushNamed(context, '/home');
} catch (e) {
// 处理错误
print('Error signing in with Ethereum: $e');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Sign-In with Ethereum'),
),
body: Center(
child: ElevatedButton(
onPressed: () => _signInWithEthereum(context),
child: Text('Sign In with Ethereum'),
),
),
);
}
}
4. 验证签名消息
在服务器端,你需要验证用户的签名消息。你可以使用 SIWE 库 来验证签名。
const { SiweMessage } = require('siwe');
async function verifySignature(message, signature) {
try {
const siweMessage = new SiweMessage(message);
await siweMessage.validate(signature);
return siweMessage.address;
} catch (e) {
console.error('Signature validation failed:', e);
return null;
}
}
5. 处理登录状态
根据你的应用需求,可以在登录成功后保存用户的以太坊地址,并根据地址进行后续操作。
6. 处理登出
你可以提供一个登出按钮,清除用户的登录状态:
Future<void> _signOut() async {
await SiweFlutter.signOut();
// 处理登出后的逻辑
}