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

如何在FastAPI中生成与WordPress兼容的密码哈希,实现移动端API登录对接

如何在FastAPI中生成与WordPress兼容的密码哈希,实现移动端API登录对接

嗨,我刚好之前做过类似的WordPress和FastAPI登录对接,给你一步步理清楚怎么弄:

首先得明确一点:WordPress的密码哈希用的是phpass的Portable PHP Password Hashing Framework,也就是你在数据库里看到的以$P$或者$H$开头的哈希值。你用的passlib.phpass完全能搞定这个,而且你在wp-config.php里看到的那些AUTH_KEY、各种SALT其实和密码哈希没关系——那些是用来做会话验证、非ce签名的,密码哈希的salt是每个密码单独生成并存在哈希字符串里的,所以不用管那些全局配置。

接下来是具体的实现步骤:

1. 先安装passlib

如果还没装的话,先在你的FastAPI项目环境里执行安装命令:

pip install passlib

2. 配置phpass上下文匹配WordPress的规则

WordPress对phpass的配置是固定的,你需要把passlib的PhpassContext配置成和它一致的参数:

  • 开启portable=True:这是WordPress采用的兼容模式
  • 迭代次数(rounds)设为8:WordPress默认的迭代次数
  • 哈希算法用MD5:虽然MD5不算强,但WordPress一直保留这个配置来兼容老版本

3. 生成与WordPress兼容的密码哈希代码示例

你可以写一个工具函数,在FastAPI里用来生成符合要求的哈希,比如:

from passlib.context import CryptContext

# 配置符合WordPress的phpass上下文
pwd_context = CryptContext(
    schemes=["phpass"],
    phpass__default_rounds=8,
    phpass__portable=True
)

def generate_wordpress_hash(password: str) -> str:
    # 生成的哈希结果可直接存入WordPress的wp_users表user_pass字段
    return pwd_context.hash(password)

4. 登录时验证密码的代码示例

当移动端用户输入密码后,你需要从WordPress数据库取出对应的user_pass哈希值,然后用passlib做对比验证:

def verify_wordpress_password(plain_password: str, hashed_password: str) -> bool:
    # 对比明文密码与WordPress存储的哈希值
    return pwd_context.verify(plain_password, hashed_password)

举个实际用在FastAPI接口里的例子,比如一个登录接口:

from fastapi import FastAPI, HTTPException
import mysql.connector  # 假设你用MySQL连接WordPress数据库

app = FastAPI()
# 替换为你的WordPress数据库连接信息
db_config = {
    "host": "your_db_host",
    "user": "your_db_user",
    "password": "your_db_pass",
    "database": "your_wordpress_db"
}

@app.post("/mobile-login")
def mobile_login(username: str, password: str):
    # 从WordPress数据库获取用户的哈希密码
    conn = mysql.connector.connect(**db_config)
    cursor = conn.cursor(dictionary=True)
    cursor.execute("SELECT user_pass FROM wp_users WHERE user_login = %s", (username,))
    user = cursor.fetchone()
    cursor.close()
    conn.close()

    if not user:
        raise HTTPException(status_code=401, detail="用户不存在")
    
    # 验证密码合法性
    if not verify_wordpress_password(password, user["user_pass"]):
        raise HTTPException(status_code=401, detail="密码错误")
    
    # 这里可以生成移动端会话token,比如JWT
    return {"status": "success", "message": "登录成功", "token": "your_generated_jwt_token"}

最后再强调一下:完全不用碰wp-config.php里的那些全局salt,密码哈希的逻辑和它们没有任何关系,你只需要按照上面的配置用passlib生成/验证哈希,就能完美和WordPress兼容了。

备注:内容来源于stack exchange,提问作者Anthony Aniobi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:04:32