我目前正在为我的Wordpress站点编程一个单点登录机制,以允许我公司的帮助台系统根据Wordpress进行身份验证。
为了允许这种情况发生,如果用户尚未登录,我将使用wp\\u signon()对其进行登录。以下是我所做工作的简化版本:
<?php
define(\'WP_USE_THEMES\', false);
require("wp-blog-header.php");
if(!is_user_logged_in() && $_POST["log"] == "") {
//redirect to login form that submits to this PHP script
exit(0);
}
if(!is_user_logged_in() && $_POST["log"] != "") {
$creds = array(\'user_login\' => $_POST["log"], \'user_password\' => $_POST[\'pwd\'], \'remember\' => $_POST["rememberme"]);
$user_info = wp_signon($creds, false);
if(!is_a($user_info, \'WP_Error\')) {
$username = $_POST["log"];
wp_set_current_user($user->ID, $username);
wp_set_auth_cookie($user->ID, true, false);
do_action(\'wp_login\', $username);
} else {
write_log(ERROR, "Error authenticating: " . $user_info->get_error_message($user_info->get_error_code()));
}
$user_info = wp_get_current_user();
/* Code from here uses user attributes to generate and encrypt a single sign-on token */
?>
我面临的问题是即使打了电话
wp_signon()
,
wp_set_current_user()
,
wp_set_auth_cookie()
和登录操作,用户仍然没有登录。我得到了他们的$user\\u info对象,但他们没有登录Wordpress,因此稍后当他们从支持系统返回一个安全链接时,他们无法访问该页面,必须再次登录(从而破坏了单点登录的目的)。
此外,我还试着替换整个wp_signon()
具有的节auth_redirect()
这确实成功地将用户登录到了该站点,但我发现他们被重定向到了配置文件页面,即使URL有一个查询参数将他们重定向回我的脚本。