【问题标题】:Two wordpress database with same users具有相同用户的两个 wordpress 数据库
【发布时间】:2018-12-18 18:34:50
【问题描述】:

我想在两个不同的数据库中拥有相同的 WordPress 用户

例如,如果用户在 SiteA 上注册,那么他可以登录到 SiteB。并反转。

我还想在登录后为两者创建相同的 cookie。

mywebsite.com/ (SiteA_DB)

mywebsite.com/blog/ (SiteB_DB)

【问题讨论】:

  • 根据您在问题中列出的标准,您应该能够通过使用子目录设置 WordPress 多站点安装来实现此目的。有一个detailed tutorial 可用于完成设置过程。每个站点在数据库中都有自己的表,但它们都为注册用户共享一个 wp_user 表。如果您愿意,我稍后可以为您写一个更详细的答案。

标签: wordpress


【解决方案1】:

我以前从未这样做过,也许 Wordpress 有钩子来存档这个,但我更喜欢使用 mysql 来实现这样的技巧。

你可以试试..

  1. .. 使用“联合存储”(https://stackoverflow.com/a/24532395/10362812
    这是我的最爱,因为您甚至不必共享数据库甚至 mysql 服务器
    缺点是它不适用于数据库缓存并使用额外的连接。
  2. .. 创建一个'view' (https://stackoverflow.com/a/1890165/10362812)
    这在查询本身中使用数据库名称时应该是可能的,如果可行,这将是最简单的解决方案。
    缺点:据我所知,这两个表共享同一个 mysql-server 并且必须分配给同一个用户。

    -- **Backup your database before trying!** --
    DROP TABLE `second_database`.`wp_users`;
    DROP TABLE `second_database`.`wp_usermeta`;
    CREATE VIEW `second_database`.`wp_users` AS SELECT * FROM `first_database`.`wp_users`;
    CREATE VIEW `second_database`.`wp_usermeta` AS SELECT * FROM `first_database`.`wp_usermeta`;
    

    这应该可以工作,根据:Creating view across different databases

  3. .. 创建一个“影子副本”(https://stackoverflow.com/a/1890166/10362812
    与缓存一起工作,是一个独立的表
    缺点 2. 解决方案 + 一些设置而且我认为这可能是性能上最差的选择

这是这个问题的答案:How do I create a table alias in MySQL
我为您将它们合并在一起,使它们适合您的用例。

还请注意,解决方案 1 和 2 将替换您当前的用户表 auf“second_database”,因为您在查询美联储时直接写入“first_database”。存储或视图。这可能会导致用户角色插件出现问题。你也应该注意同步插件选项,如果你应该使用其中之一并且它使用不同的表或'wp_options'值。

让我知道这是否可行,我下周必须执行类似的任务。在研究时,我找到了链接的答案。

编辑:我在回答中遗漏了“cookie-sharing”这一点。您的示例显示了同一域上的博客 - 您应该能够更改 wordpress 将其 cookie 设置为域范围的方式。我曾经为 2 个不同的域所做的是,我连接到后端 (is_admin) 并添加了一个 javascript,该 javascript 对 siteB 进行了后请求,接收了一个存储但在 siteB 上标记为“无效”的令牌。然后将该令牌传递回我在站点A上的插件,该插件检查用户是否已登录并且(在我的情况下)是否具有管理员权限(current_user_can()),如果是,则将此令牌发送回将令牌标记为有效的sideB登录。 (确保只有 sideA 可以告诉 sideB 使此令牌有效!)一旦在站点 B 的 cookie 中看到用户使用此令牌,该用户将在后台自动登录。我也做了这个双向的。对不起,我不能为你分享代码。我再也无法访问它了。

你好,埃里克!

【讨论】:

  • 您是否考虑过使用 WordPress Multisite?它旨在在多个 WordPress 站点之间共享 wp_user 表。无需直接操作 MySQL,可以依靠 WordPress 自带的函数来达到最终结果(理论上)。
  • 嘿柯克!多站点对我来说不是一个合适的解决方案,原因有多种情况,例如两个站点必须在同一台机器上运行(使用“联合存储”共享表时不需要),尤其是我不想在受到攻击时共享相同的文件库。对于经验不足或要实现的目标较低或其他目标的人来说,多站点是一个很好的解决方案。但是您可能已经为其他人找到这个主题提出了一个很好的观点!
  • 不用担心,Eric,我不知道您要求的全部细节,但对于其他人来说,这是一个非常详细的答案。我想我会提到它,以防万一。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-24
  • 1970-01-01
  • 2013-08-05
相关资源
最近更新 更多