Flutter密码管理服务插件pip_services_passwords的使用
Flutter密码管理服务插件pip_services_passwords的使用

密码管理微服务
本篇文档介绍了如何在Flutter应用中使用pip_services_passwords
插件。该插件是一个基于Pip.Services库的密码认证微服务,支持设置用户密码、验证密码、安全更改密码、通过电子邮件重置和恢复密码等功能。
功能描述
- 设置用户密码并进行身份验证
- 安全地更改密码
- 通过电子邮件重置和恢复密码
部署选项
- 部署平台:独立进程、Seneca
- 外部API:HTTP/REST、Seneca
- 持久化存储:扁平文件、MongoDB
可选依赖项
pip-services-activities
:用于记录用户活动pip-services-email
:用于向用户发送电子邮件通知
快速链接
- 下载链接
- 开发指南
- 配置指南
- 部署指南
- 客户端SDK
- 通信协议
- HTTP版本1
合同定义
逻辑合同由以下接口定义。对于物理实现(如HTTP/REST),请参阅特定协议的文档。
class UserPasswordV1 implements IStringIdentifiable {
/* 识别信息 */
String id;
String password;
/* 密码管理 */
DateTime change_time;
bool locked;
DateTime lock_time;
num fail_count;
DateTime fail_time;
String rec_code;
DateTime rec_expire_time;
/* 自定义字段 */
dynamic custom_hdr;
dynamic custom_dat;
}
class UserPasswordInfoV1 implements IStringIdentifiable {
String id;
DateTime change_time;
bool locked;
DateTime lock_time;
}
abstract class IPasswordsV1 {
Future<UserPasswordInfoV1> getPasswordInfo(
String? correlationId, String userId);
Future validatePassword(String? correlationId, String password);
Future setPassword(String? correlationId, String userId, String password);
Future<String> setTempPassword(String? correlationId, String userId);
Future deletePassword(String? correlationId, String userId);
Future<bool> authenticate(
String? correlationId, String userId, String password);
Future changePassword(String? correlationId, String userId, String oldPassword,
String newPassword);
Future<bool> validateCode(String? correlationId, String userId, String code);
Future resetPassword(
String? correlationId, String userId, String code, String password);
Future recoverPassword(String? correlationId, String userId);
}
下载
目前唯一获取微服务的方式是从GitHub仓库直接克隆:
git clone git@github.com:pip-services-users/pip-services-passwords-dart.git
Pip.Service团队正在努力实现打包,并使其稳定发布,以便您可以下载zip压缩包。
运行
在微服务根目录下添加一个config.yaml
文件,并设置配置参数。
微服务配置示例
---
# 容器描述符
- descriptor: "pip-services:context-info:default:default:1.0"
name: "pip-services-passwords"
description: "Passwords microservice for pip-services"
# 控制台日志
- descriptor: "pip-services:logger:console:default:1.0"
level: "trace"
# 记录性能计数器的日志
- descriptor: "pip-services:counters:log:default:1.0"
level: "trace"
{{#MEMORY_ENABLED}}
# 内存持久化。仅用于测试!
- descriptor: "pip-services-passwords:persistence:memory:default:1.0"
{{/MEMORY_ENABLED}}
{{#FILE_ENABLED}}
# 文件持久化。用于测试或简单的独立部署
- descriptor: "pip-services-passwords:persistence:file:default:1.0"
path: {{FILE_PATH}}{{^FILE_PATH}}"./data/passwords.json"{{/FILE_PATH}}
{{/FILE_ENABLED}}
{{#MONGO_ENABLED}}
# MongoDB持久化
- descriptor: "pip-services-passwords:persistence:mongodb:default:1.0"
collection: {{MONGO_COLLECTION}}{{^MONGO_COLLECTION}}passwords{{/MONGO_COLLECTION}}
connection:
uri: {{{MONGO_SERVICE_URI}}}
host: {{{MONGO_SERVICE_HOST}}}{{^MONGO_SERVICE_HOST}}localhost{{/MONGO_SERVICE_HOST}}
port: {{MONGO_SERVICE_PORT}}{{^MONGO_SERVICE_PORT}}27017{{/MONGO_SERVICE_PORT}}
database: {{MONGO_DB}}{{#^MONGO_DB}}app{{/^MONGO_DB}}
credential:
username: {{MONGO_USER}}
password: {{MONGO_PASS}}
{{/MONGO_ENABLED}}
{{^MEMORY_ENABLED}}{{^FILE_ENABLED}}{{^MONGO_ENABLED}}
# 默认内存持久化
- descriptor: "pip-services-passwords:persistence:memory:default:1.0"
{{/MONGO_ENABLED}}{{/FILE_ENABLED}}{{/MEMORY_ENABLED}}
# 默认控制器
- descriptor: "pip-services-passwords:controller:default:default:1.0"
# 公共HTTP端点
- descriptor: "pip-services:endpoint:http:default:1.0"
connection:
protocol: "http"
host: "0.0.0.0"
port: 8080
# HTTP端点版本1.0
- descriptor: "pip-services-passwords:service:http:default:1.0"
# 心跳服务
- descriptor: "pip-services:heartbeat-service:http:default:1.0"
# 状态服务
- descriptor: "pip-services:status-service:http:default:1.0"
更多信息,请参阅配置指南。
启动微服务的命令:
dart ./bin/run.dart
使用
最简单的方法是使用客户端SDK。完整的客户端SDK列表请参见快速链接部分。
如果使用Dart语言,那么需要引用以下库:
- Pip.Services3.Commons: https://github.com/pip-services3-dart/pip-services3-commons-dart
- Pip.Services3.Rpc: https://github.com/pip-services3-dart/pip-services3-rpc-dart
导入所需的包:
import 'package:pip_services3_commons/pip_services3_commons.dart';
import 'package:pip_services3_rpc/pip_services3_rpc.dart';
import 'package:pip_services_passwords/pip_services_passwords.dart';
定义客户端配置参数,使其与微服务外部API的配置匹配:
// 客户端配置
var httpConfig = ConfigParams.fromTuples(
"connection.protocol", "http",
"connection.host", "localhost",
"connection.port", 8080
);
实例化客户端并打开连接到微服务:
// 创建客户端实例
var client = PasswordsHttpClientV1(config);
// 配置客户端
client.configure(httpConfig);
// 连接到微服务
try{
await client.open(null);
}catch(e) {
// 错误处理...
}
// 使用微服务
// ...
现在客户端已准备好执行操作:
// 创建新密码
final USER_PWD = UserPasswordV1(id: '1', password: 'password123');
// 创建密码
try {
await client.setPassword('123', USER_PWD.id, USER_PWD.password);
// 对返回的密码进行处理...
} catch(err) {
// 错误处理...
}
// 验证身份
try {
var authenticated =
await client.authenticate(null, USER_PWD.id, 'password123');
// 对验证结果进行处理...
} catch(err) { // 错误处理
}
示例代码
// 服务/客户端配置
var httpConfig = ConfigParams.fromTuples(
"connection.protocol", "http",
"connection.host", "localhost",
"connection.port", 8080
);
// 实例化服务
persistence = PasswordsMemoryPersistence();
persistence.configure(ConfigParams());
controller = PasswordsController();
controller.configure(ConfigParams());
service = PasswordsHttpServiceV1();
service.configure(httpConfig);
var references = References.fromTuples([
Descriptor('pip-services-passwords', 'persistence', 'memory',
'default', '1.0'),
persistence,
Descriptor('pip-services-passwords', 'controller', 'default',
'default', '1.0'),
controller,
Descriptor(
'pip-services-passwords', 'service', 'http', 'default', '1.0'),
service
]);
controller.setReferences(references);
service.setReferences(references);
await persistence.open(null);
await service.open(null);
// 实例化客户端并打开连接到微服务
// 创建客户端实例
var client = PasswordsHttpClientV1(config);
// 配置客户端
client.configure(httpConfig);
// 连接到微服务
try{
await client.open(null);
}catch(e) {
// 错误处理...
}
// 使用微服务
// ...
// 创建新密码
final USER_PWD = UserPasswordV1(id: '1', password: 'password123');
// 创建密码
try {
await client.setPassword('123', USER_PWD.id, USER_PWD.password);
// 对返回的密码进行处理...
} catch(err) {
// 错误处理...
}
// 验证身份
try {
var authenticated =
await client.authenticate(null, USER_PWD.id, 'password123');
// 对验证结果进行处理...
} catch(err) { // 错误处理
}
更多关于Flutter密码管理服务插件pip_services_passwords的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter密码管理服务插件pip_services_passwords的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
pip_services_passwords
是一个用于密码管理的 Flutter 插件,通常用于处理密码的生成、验证、加密和解密等操作。这个插件提供了一套简单易用的 API,帮助开发者在应用程序中安全地管理密码。
安装插件
首先,你需要在 pubspec.yaml
文件中添加 pip_services_passwords
插件的依赖:
dependencies:
flutter:
sdk: flutter
pip_services_passwords: ^1.0.0 # 请根据实际情况填写最新版本号
然后运行 flutter pub get
来安装插件。
使用插件
以下是一些常见的使用场景和示例代码:
1. 生成密码
你可以使用 PasswordGenerator
类来生成随机密码。
import 'package:pip_services_passwords/pip_services_passwords.dart';
void main() {
var generator = PasswordGenerator();
var password = generator.generate(12); // 生成一个12位的随机密码
print('Generated Password: $password');
}
2. 验证密码强度
PasswordValidator
类可以帮助你验证密码的强度。
import 'package:pip_services_passwords/pip_services_passwords.dart';
void main() {
var validator = PasswordValidator();
var password = 'MySecurePassword123';
if (validator.validate(password)) {
print('Password is strong!');
} else {
print('Password is weak!');
}
}
3. 加密和解密密码
PasswordCipher
类提供了密码的加密和解密功能。
import 'package:pip_services_passwords/pip_services_passwords.dart';
void main() {
var cipher = PasswordCipher();
var password = 'MySecurePassword123';
// 加密密码
var encryptedPassword = cipher.encrypt(password);
print('Encrypted Password: $encryptedPassword');
// 解密密码
var decryptedPassword = cipher.decrypt(encryptedPassword);
print('Decrypted Password: $decryptedPassword');
}
4. 密码哈希
PasswordHasher
类用于生成密码的哈希值。
import 'package:pip_services_passwords/pip_services_passwords.dart';
void main() {
var hasher = PasswordHasher();
var password = 'MySecurePassword123';
// 生成哈希值
var hash = hasher.hash(password);
print('Password Hash: $hash');
// 验证哈希值
if (hasher.verify(password, hash)) {
print('Password matches the hash!');
} else {
print('Password does not match the hash!');
}
}