我正在编写一个web/db应用程序。我的客户希望根据用户是否登录WordPress进行身份验证。
假设此应用程序是从内部托管的/wordpress
我希望能够:
确定谁(如果有)登录到WordPress
似乎应该可以通过wp_get_current_user()
但我找不到任何文档详细说明哪些文件需要包含才能使其正常工作。包括…在内/wp-includes/plugin.php
和pluggable.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
最合适的回答,由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的帮助。