You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dart/Flutter中指定WordPress Salt实现安全身份验证?

WordPress + Flutter/Dart 开发问题解决方案

1. 直接连接MySQL验证WordPress用户密码

首先明确:WordPress的密码哈希不依赖wp-config.php里的WP Salt(AUTH_KEY等),这些Salt用于Cookie签名等场景,与密码哈希逻辑无关。WP密码是通过PHP的password_hash()生成的,哈希值本身已包含盐和算法信息。

在Dart中验证密码的步骤:

  • 用mysql_client连接WordPress数据库,查询wp_users表(注意表前缀可能非wp_,需匹配你的配置)的user_pass字段
  • 使用Dart的bcrypt库(对应WP默认的bcrypt哈希算法)验证输入密码与存储哈希是否匹配

示例代码:

import 'package:bcrypt/bcrypt.dart';
import 'package:mysql_client/mysql_client.dart';

Future<bool> verifyUserPassword(String username, String inputPassword) async {
  // 连接数据库(替换为你的数据库信息)
  final conn = await MySQLConnection.createConnection(
    host: 'localhost',
    port: 3306,
    userName: 'db_user',
    password: 'db_pass',
    databaseName: 'wp_db',
  );
  await conn.connect();

  // 查询用户密码哈希(替换表前缀)
  final result = await conn.execute(
    "SELECT user_pass FROM wp_users WHERE user_login = :username",
    {"username": username},
  );

  await conn.close();

  if (result.rows.isEmpty) return false;

  String storedHash = result.rows.first.assoc()['user_pass']!;
  // 验证密码
  return BCrypt.checkpw(inputPassword, storedHash);
}

安全注意事项:

  • 数据库用户仅授予wp_users表的查询权限,无修改/删除权限
  • Flutter端禁止硬编码数据库凭证,建议通过后端API中转或加密存储环境变量

2. WP OAuth插件400错误排查

400错误多为请求格式或参数问题,按以下步骤排查:

  • 检查请求头:必须设置Content-Type: application/x-www-form-urlencoded,多数OAuth插件不支持JSON格式请求
  • 核对必填参数:密码授权模式下,需包含:
    • grant_type=password
    • client_id(插件后台生成的客户端ID)
    • client_secret(插件后台生成的客户端密钥)
    • username(WP用户名)
    • password(WP用户密码)
  • 检查插件设置:确认已启用密码授权类型,客户端ID/密钥无复制错误(避免多余空格)
  • 查看错误详情:响应体通常会返回invalid_client或invalid_grant等具体提示,对应调整参数

3. WordPress核心API登录实现

WP REST API无原生登录端点,推荐使用JWT认证方案:

  1. 安装插件:启用「JWT Authentication for WP REST API」插件
  2. 配置wp-config.php:添加以下代码(替换为随机生成的密钥):
    define('JWT_AUTH_SECRET_KEY', 'your_random_secret_key');
    define('JWT_AUTH_CORS_ENABLE', true);
    
  3. 获取JWT Token:Flutter中发送POST请求到你的WP域名/wp-json/jwt-auth/v1/token,参数为表单编码的username和password
  4. 使用Token访问API:后续请求在请求头添加Authorization: Bearer <你的token>,即可访问需认证的API端点

示例Dart代码:

import 'package:http/http.dart' as http;
import 'dart:convert';

Future<String?> getWpAuthToken(String username, String password) async {
  final response = await http.post(
    Uri.parse('https://your-wp-site.com/wp-json/jwt-auth/v1/token'),
    body: {
      'username': username,
      'password': password,
    },
  );

  if (response.statusCode == 200) {
    return jsonDecode(response.body)['token'];
  }
  return null;
}

内容的提问来源于stack exchange,提问作者Erin Skidds

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 20:25:12