gpt4 book ai didi

php - 使网站登录也适用于 WordPress

转载 作者:可可西里 更新时间:2023-11-01 06:33:35 24 4
gpt4 key购买 nike

我使用 PHP 和 MySQL 开发了一个网站,该网站已经有一个登录和注册表单。 (myweb.com)

我已经在这个 url myweb.com/blog

添加了 wordpress

我想禁用 WordPress 上的登录和注册页面并强制用户使用我的。基本上将我的登录名与 WordPress 集成,以便用户可以在两个站点上登录。

我的站点 members 表如下所示。 所有注册用户都存储在这里。我的数据库中的密码使用 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() 不进行身份验证?

最佳答案

您可以通过编辑 config.php 并添加以下两行来设置 wordpress 登录以使用自定义表:

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 是您网站的 bio 表(如果需要的话)

自定义表格需要与普通 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, $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 站点的每个页面中。将 echo 替换为要为登录用户显示的任何内容,并将标题替换为要为访客显示的任何内容。如果内容是简单的 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
};
?>

关于php - 使网站登录也适用于 WordPress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21106556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com