Wordpress 存储用户身份验证数据的方式背后的细节是啥?

Posted

技术标签:

【中文标题】Wordpress 存储用户身份验证数据的方式背后的细节是啥?【英文标题】:What are the details behind the way Wordpress stores user authentication data?Wordpress 存储用户身份验证数据的方式背后的细节是什么? 【发布时间】:2010-11-06 17:38:29 【问题描述】:

首先,让我定义最终目标:

我想使用 Wordpress(2.8 版)来管理网站的身份验证数据/凭据和访问控制。 Wordpress 将用于大部分站点,但某些页面将在 Wordpress 环境之外构建。这些页面应该能够使用存储在 Wordpress 数据库中的用户身份验证数据作为参考来做出自己的访问决定。

那么问题来了:

Wordpress 究竟如何在其数据库中存储用户身份验证数据?


这个答案的第一部分很简单,在 Wordpress 数据库中,有一个保存主要用户数据的表。我相信这个表的默认名称是“wp_users”,但这可能会根据 Wordpress 的设置方式而改变。该表包含字段“user_login”和“user_pass”,分别保存用户名和密码数据。

“user_login”只是一个纯文本字段,因此很容易访问,但密码是加盐和散列的。这导致了仍然需要确定的第一件事:Wordpress 用于生成存储在“user_pass”中的字符串的加盐和散列过程是什么?

保持开放的另一部分是 Wordpress 存储其“角色”的位置/方式。在我的安装中,这些角色默认为:管理员、编辑、作者、贡献者和订阅者。我没有看到这些角色如何与单个用户相关联。另外,这些角色可以改变吗?


所以,回顾一下,真正的问题分为三个部分:

1) Wordpress 将用户的纯文本密码转换为存储在“wp_users”数据库表的“user_pass”列中的字符串的具体方法是什么?

2) 个人用户与其各自的 Wordpress“角色”之间的链接存储在哪里?

3) 可以修改 Wordpress 中的“角色”以更改其名称和/或添加/删除它们吗?


注意:我意识到另一种方法是让非 Wordpress 页面检查 Wordpress cookie 以确定访问权限。我将沿着这些思路创建另一个问题,但就这个问题而言,重点是非 Wordpress 页面如何利用实际的 Wordpress 数据库来决定访问控制。

【问题讨论】:

您是否曾经根据用户角色在 WP 之外管理过显示页面?愿意分享你的所作所为吗? :) 【参考方案1】:
    Wordpress 使用Portable php password hashing framework。另请参阅此问题:What type of hash does WordPress use? 默认情况下,此关联位于 wp_usermeta 表中 wp_user_level 键下 不是没有插件(或没有编辑编辑 Wordpress 的代码或数据库)

您可能想查看bbPress 的代码,因为它将共享 Wordpress 的用户数据库。

【讨论】:

1) 我会看看那个链接。 (我搜索了相当数量但不知何故错过了那个。) 2)感谢“wp_tech_usermeta”的点,现在我在那里,我知道发生了什么。在 2.8 中,您似乎需要查询“user_id”、“meta_key”和“meta_value”列,其中“meta_key”=“wp_tech_capabilities”。 meta_value 类似于 a:1:s:13:"administrator";b:1; 或 a:1:s:10:"subscriber";b:1;。 3)明白了,我会用那里的东西工作。谢谢。

以上是关于Wordpress 存储用户身份验证数据的方式背后的细节是啥?的主要内容,如果未能解决你的问题,请参考以下文章

使用 WordPress 进行用户身份验证

身份验证背后的 Web Scraper

从Laravel到Wordpress数据库的Auth用户

使用 Wordpress 用户或数据库验证 Firebase/Firechat

将 Wordpress 用户导入 Firebase 身份验证

如何在 wordpress 中对用户进行身份验证?