2014-01-14 60 views
8

我开发了一个使用PHP和MySQL的网站,它已经有一个登录和注册表单。 (myweb.com也使WordPress的网站登录工作

我在这个网址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) { 
    } 
} 

也,所有的用户信息都存储在我的网站的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个登录和2个注册表单。

为什么我的代码中不会有wp_authenticate()验证?

回答

0

尝试更改您的wp-config.php文件中的选项以指向您的members数据库;用MySQL创建一个单独的用户/密码并授予其成员数据库权限可能是一个好主意。您可以使用该文件设置/更改许多有用的选项。我建议你阅读documentation以获得更深入的内容。如果您决定尝试上述方法,请确保也要更改$table-prefix行以匹配您的现有数据库。

此外,请参阅this博客文章是否有帮助,因为它直接处理外部认证。有一个PHP脚本可供您复制/粘贴或以其他方式适应您的特定需求。请特别注意include_once("../wp-config.php");include_once("../wp-includes/class-phpass.php");这几行。

+0

权限已经设置在两个数据库中,并且可以读取和写入我的站点数据库和wordpress数据库。只是从我的网站登录到wordpress不起作用 – user2636556

+0

你看过那篇博客文章我链接,第一个评论 - 关于密码哈希? '$ wp_hasher =新PasswordHash(8,TRUE);' '$ password_hashed = $行[ 'user_pass'];' 这是关于用户通WordPress的手册: >记住,user_pass应该是纯文本密码,因为它会被WordPress自动散列。 但是,据我所知,这是通过'wp-includes/class-phpass.php'脚本完成的。 –

+0

无论密码的复杂程度如何,WordPress现在都默认使用PasswordHash类来哈希密码。 较新版本的WordPress(自版本2.5开始)不再使用MD5,除非作为最后的手段,如果一系列更安全的哈希协议不可用。 PasswordHash首先处理尝试最安全的方法,然后尝试下一个最安全的方法(如果第一个方法对主机服务器不可用),等等。 –

4

可以设置WordPress的登录通过编辑config.php文件并添加以下两行使用自定义表:

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-包括/ pluggable.php和使用函数
<?php $hash = wp_hash_password($password) ?>

对于未散列现有密码正确的,你必须设置一个电子邮件密码重置。

或者。如果你想保留你当前的密码哈希值(不是出于安全原因而推荐的,但可行),你可以改变wordpress哈希函数。在WP-包括/ 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, $hash, $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站点。将回显替换为登录用户要显示的任何内容,并将标题替换为客人显示的内容。如果内容是简单的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 
}; 
?> 
0

我已经设法通过使用Wordpress API中的函数来做到这一点。

wp_set_auth_cookie($wordpress_user_id, $remember, false); 

$wordpress_user_id是Wordpress表中用户的ID。

$remember是一个布尔变量,指示Wordpress是否应该在会话之间创建“记住”用户的持久cookie。

我不记得第三个,但你可以很容易地Google。


P.S.要使wp_set_auth_cookie功能可用,您需要在使用之前包含/需要一些Wordpress文件。尝试使用wp-load.php文件。

+0

所以我必须将我的会员表复制到wordpress中? – user2636556

+0

@ user2636556我不确定哪种情况最适合您的情况。我的解决方案将Wordpress博客/网站和其他网站视为两个完全分开的东西。但你可以让用户觉得它们是一个整体。你可能会注册和评论类似的东西。 –