我在这个url myweb.com/blog上添加了wordpress
我想在wordpress上禁用登录和注册页面并强制用户使用我的.基本上将我的登录与wordpress集成,以便用户将在两个站点上登录.
我的网站成员表看起来像这样.并且所有注册用户都存储在此处.我的数据库中的密码使用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
我尝试按照步骤mentioned here
但是我在第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) { } }
此外,所有用户信息都存储在我的站点上的成员表中,而不是存储在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(); }
我是否必须从我的成员表中复制所有内容并将其填充到wp_users中,或者有没有办法登录到wordpress而不会在2个不同的表中重复数据?我不想在两个网站上都有2个登录和2个注册表单.
为什么我的代码中的wp_authenticate()不会进行身份验证?
define('CUSTOM_USER_TABLE','new_user_table'); //login,pass,email etc define('CUSTOM_USER_Meta_TABLE','new_userMeta_table'); //optional bio,don't have to include this line
new_user_table是您网站的表格,new_userMeta_table是您网站的生物表格(如果您需要)
自定义表需要具有与普通wordpress表相同的结构.因此,要使用现有网站的表格,您必须添加一些字段并确保密码以相同的方式进行哈希处理.
Here is how to structure the user table
Here is how to structure the user meta table
要在注册时正确散列密码,请包含文件wp-includes / pluggable.PHP并使用该函数
<?PHP $hash = wp_hash_password($password)?>
对于未正确散列的现有密码,您必须设置电子邮件密码重置.
要么.如果您想保留当前的密码哈希值(不建议出于安全原因但可行),您可以更改wordpress哈希功能.在wp-includes / pluggable.PHP中更改:
if ( !function_exists('wp_hash_password') ){ function wp_hash_password($password) { //apply your own hashing structure here return $password; } }
并改变:
if ( !function_exists('wp_check_password') ){ function wp_check_password($password,$hash,$user_id = '') { //check for your hash match return apply_filters('check_password',$check,$password,$user_id); } }
有关wp_check_password Go Here的详细信息
另外
您可以跳过自定义用户表,并将wordpress登录应用于您网站的其余部分.为此,请使用以下代码:
<?PHP include 'wp-config.php'; if ( is_user_logged_in() ) { echo 'Welcome,registered user!'; } else { header( 'Location: http://google.com' ) ; }; ?>
确保’wp-config.php’是文件的完整相对路径,然后将此代码放在非WordPress网站的每个页面中.将echo替换为要为登录用户显示的任何内容,并将该标头替换为要为guest虚拟机显示的任何内容.如果内容是简单的html,您可以执行以下操作:
<?PHP include 'wp-config.php'; if ( is_user_logged_in() ) { ?> <html> <head></head> <body><p>Welcome Registered user</p></body> </html> <?PHP } else { ?> <html> <head></head> <body><p>Please log in</p></body> </html> <?PHP }; ?>