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

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

Pip.Services Logo
密码管理微服务

本篇文档介绍了如何在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语言,那么需要引用以下库:

导入所需的包:

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

1 回复

更多关于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!');
  }
}
回到顶部