与WordPress的外部系统集成

时间:2016-03-03 作者:Gareth

我正在编写一个web/db应用程序。我的客户希望根据用户是否登录WordPress进行身份验证。

假设此应用程序是从内部托管的/wordpress 我希望能够:

确定谁(如果有)登录到WordPress

似乎应该可以通过wp_get_current_user() 但我找不到任何文档详细说明哪些文件需要包含才能使其正常工作。包括…在内/wp-includes/plugin.phppluggable.php 结果为class WP_User not found 错误来自wp_get_current_user(). 我假设一些必需的include文件没有包括在内,但哪个文件?

阅读WordPress Cookie

似乎需要了解创建它们时使用的哈希-这是如何获取的?

Additional Information: 客户是一个由300多名艺术家组成的团队

WordPress中管理的网站和管理展览提交的系统、会员数据库、ROTA、用户角色、目录制作、详细的业务规则/验证、权限等,归结为各种m:n关系。因此,与WordPress一起为面向公众的网站提供“俱乐部管理”的独立系统似乎比WordPress更适合,因为WordPress有无数插件,前途未卜。可以理解,这个团队渴望SSO。OAuth或类似的版本不是一个选项,因为我们仅限于一个共享托管(cPanel)帐户。

UPDATE - simple solution found - see my answer below

2 个回复
最合适的回答,由SO网友:Gareth 整理而成

解决方案:

如果应用程序是从wordpress的根目录中托管的(例如/var/www/html/wordpress),则其脚本将能够读取限制为通过wordpress根路径中的脚本读取的Cookie。

siteurl 是一个wordpress变量,如果不想硬编码,可以从wp_options 桌子

Wordpress将当前登录的用户名存储在名为wordpress_logged_in_<md5HashOfSiteURL> 以及wordpress用户名和密码的哈希。这可以通过如下代码所示的字符串操作进行拆分/获取。

感谢@PeterTomasScott提供以下信息:https://softwareengineering.stackexchange.com/questions/312861/why-do-some-web-apps-append-random-strings-to-cookie-names

这(PHP)似乎按预期工作:

$hash=md5("http://localhost/wordpress"); // or get dynamically from db $wpcookie=$_COOKIE["wordpress_logged_in_$hash"]; $stop=strpos($wpcookie,"|"); $currentusername=substr($wpcookie,0,$stop);

的内容$wpcookie 第一个“|”后面是当前用户用户名和密码的哈希(来自wp_users) 可用于进一步的安全检查。

我放弃了基于wordpress函数的方法,因为Apache抱怨WPxxx常量未定义(因此函数无法工作,一些包含文件链上的包含文件无法包含),尽管wp安装时没有抱怨。我希望我的安装有问题,否则要实现简单的东西就太麻烦了。。。不

尽管如此,还是要感谢@kaiser的帮助。

SO网友:kaiser

看看什么wp_parse_auth_cookie() 做考虑到您拥有所有可用的Cookie常量,您可以轻松地复制它。

尽管如此,我还是强烈建议不要这样做。在您的情况下,我会尽量与WordPress集成,以避免重复身份验证机制。通过使用插件,您始终可以使用任何自定义代码(并连接到外部数据库)。只需将插件头注释添加到自定义应用程序的引导过程中,就可以运行了。您还可以轻松地在自定义管理页面上显示数据,或将页面模板添加到面向公众的网站,以处理来自该网站的数据条目。然后使用限制对应用程序的访问is_user_logged_in()exit( wp_redirect( home_url() ) ); 在其他任何情况下。

另一种选择是构建自定义应用程序,并通过REST API (可用路线+addt. docs). 使用WP作为简单的数据提供者后端并不难。

相关推荐

为什么我不能执行wp-includes文件夹下的php文件?

我正在调整WordPress以更好地理解它,玩它。出于个人目的。但从加载自定义文件/wp-includes 文件夹无法工作。我试图添加信息。php文件位于/wp-includes 包含phpinfo() 当我尝试通过以下方式在浏览器中访问它时example.com/wp-includes/info.php, 服务器返回错误503。文件夹权限设置为775,文件权限设置为644。Important note: 如果我重命名wp-includes 文件夹,例如wp-include, 那就行了!我联系了主机支持人