我使用 PHP 和 MySQL 开发了一个网站,该网站已经有登录和注册表单。 (myweb.com
)
我已经在这个网址添加了 wordpressmyweb.com/blog
我想禁用 WordPress 上的登录和注册页面并强制用户使用我的。基本上将我的登录与 WordPress 集成,以便用户可以在两个站点上登录。
My site members
桌子看起来像这样。和all注册用户存储在这里。我的数据库中的密码是使用哈希值md5()
id | name | email | password
WordPress的结构是这样的,目前是空的
ID | user_login | user_pass | user_nicename | user_email | user_url | user_registered | user_activation_key | user_status | display_name
我尝试按照以下步骤操作这里提到 https://wordpress.stackexchange.com/questions/8887/sso-authentication-integration-with-external-directory-service
但我在第 254 行收到此错误var_dump($user);
object(WP_Error)#620 (2) {
["errors"]=>
array(1) {
["invalid_username"]=>
array(1) {
[0]=>
string(166) "<strong>ERROR</strong>: Invalid username. <a href="http://localhost/dev/blog/wp-login.php?action=lostpassword" title="Password Lost and Found">Lost your password</a>?"
}
}
["error_data"]=>
array(0) {
}
}
此外,所有用户信息都存储在我的members
我网站上的表不在 WordPress 的数据库中。
这是我的网站的登录代码,我最近也添加了 WordPress 登录。
/*
* Login
*
* $email = email of user
* $pass = user password (must already be in md5 form)
* $url = url of page they are login from
*/
function login($email = '', $pass = '', $url = '', $sticky = false)
{
global $lang, $_db, $mod, $template_style;
// Replace nasty things to stop sql injection
$email = addslashes(strtolower($email));
$email = strip_tags($email);
$email = htmlspecialchars($email, ENT_QUOTES);
//get user id
$sql = "SELECT `id`, `name`, `username`
FROM `members`
WHERE `email`='".mysql_real_escape_string($email)."'
AND `pass` = '" . mysql_real_escape_string($pass) . "'
LIMIT 0,1";
$q = $_db->query($sql);
list($uid, $name, $username) = $_db->fetch_array($q);
$login_check = $_db->num_rows($q);
if ($login_check <= '0') //check if login matches
{
echo '0'; //login failed
die;
}
/*
* wordpress login
*
* read:
* http://codex.wordpress.org/Function_Reference/wp_update_user
*/
$credentials = array();
$credentials['user_email'] = $email;
$credentials['user_password'] = $pass;
$credentials['remember'] = $sticky; // true/false
$secure_cookie = false; // true / false
$user = wp_authenticate($credentials['user_email'], $credentials['user_password']);
if ( is_wp_error($user) ) {
if ( $user->get_error_codes() == array('empty_email', 'empty_password') ) {
//$user = new WP_Error('', '');
$user = wp_update_user(array ( 'user_login' => $name, 'user_email' => $email, 'user_pass' => $pass ));
}
}
var_dump($user);
wp_set_auth_cookie($user->ID, $credentials['remember'], $secure_cookie);
do_action('wp_login', $user->user_login, $user);
/*
set login cookies
*/
set_login_cookie($uid, $pass, $sticky);
//lock check
lock_checker($uid);
update_thisuser_online();
}
我是否必须复制我的所有内容members
表并将其填充到wp_users
或者有没有办法登录到 wordpress 而不会在两个不同的表中出现重复的数据?我不想在两个网站上都有 2 个登录名和 2 个注册表单。
为什么不会wp_authenticate()
在我上面的代码中进行身份验证?