从另一个网站自动登录到 WordPress
由
Deepseek提供支持
广告
无需密码即可从网站 A自动安全登录网站 B。我们可以通过使用 WordPress 的 wp_set_auth_cookie() 函数来完成此操作。
网站 A = 请求自动登录链接的网站。
网站 B = 您希望自动登录的网站。
注意:我假设您有两个具有相同用户名或用户 ID 的同步数据库。
在您的 SQL 命令行中执行此 SQL 查询以创建一个新表“wp_autologin”
创建表数据库名称。wp_autologin (
id INT NOT NULL AUTO_INCREMENT ,
avatar VARCHAR ( 45 ) NULL ,
random_key VARCHAR ( 45 ) NULL ,
PRIMARY KEY ( id ) ) ;
第 1 步:在网站 B 中创建一个WordPress CUSTOM 页面。为避免以后出错,只需将其命名为“autologin-api”
这是我们将接收来自网站 A 的请求的地方
// 为我们的数据数组创建初始默认值
$err_succ = array (
'key' => 0 ,
'status' => 'failed'
) ;
// 检查接收到的密钥是否为 '54321' 以及操作是否为 'get_login_key'
if ( isset ( $_POST ) && $_POST [ 'key' ] == '54321' && $_POST [ 'action' ] == ' get_login_key' ) {
全局 $wpdb ;
// 检查我们是否从 POST 接收到 user_login,如果是 - 我们对其进行清理,然后将其保存到变量
$user_login = isset ( $_POST [ 'user_login' ] )?sanitize_text_field ( $_POST [ 'user_login' ] ) : '' ;
// 从数据库中获取用户的随机密钥
$user_random_key = $wpdb -> get_var ( $wpdb -> prepare ( "
SELECT random_key FROM wp_autologin WHERE avatar = %s " , $user_login ) ) ;
// 从数据库中统计 user_login 的数量。如果查询返回> 0,则表示它存在于数据库中。
$check_user_login = $wpdb -> get_var ( $wpdb -> prepare ( "
SELECT COUNT(user_login) FROM wp_users WHERE user_login = ' %s '" , $user_login ) ) ;
// 检查接收到的 user_login 是否存在于 wp_users 表中
if ( $check_user_login > 0 ) {
// 检查 $user_random_key 变量是否返回了 random_key。如果不是,我们生成另一个随机密钥。
如果( empty ( $user_random_key ) ) {
// 使用 md5 随机字符串生成密钥
$hash_key = md5 ( $user_login + rand ( 5 , 15 ) ) ;
// 将头像(user_login) 和密钥保存到数据库
$wpdb -> insert (
'wp_autologin' ,
array (
'avatar' => $user_login ,
'random_key' => $hash_key
)
) ;
} 其他 {
// 如果 $user_random_key 变量返回一个 random_key,我们将它返回给请求的客户端。
$hash_key = $user_random_key ;
}
// 返回 hash_key 并将状态设置为成功
$err_succ [ 'key' ] = $hash_key ;
$err_succ [ '状态' ] = '成功' ;
} else {
// 如果接收到的 user_login 在数据库中不存在,我们将失败状态返回给请求的客户端
$err_succ [ 'status' ] = 'failed' ;
}
}
// 将数组设置为变量
$result = $err_succ ;
// JSON 编码结果然后将其发送回请求客户端
echo json_encode ( $result ) ;
第 2 步:在网站 B 中创建另一个WordPress CUSTOM 页面,将其命名为“autologin”
global $wpdb;
// 检查用户是否已经登录,如果为真,则重定向到帐户 if
( ! is_user_logged_in ( ) ) { //
检查密钥是否已设置且不为空
if ( isset ( $_GET [ 'key' ] ) && ! empty ( $_GET [ 'key' ] ) ) {
// 清理收到的密钥以防止 SQL 注入
$received_key = sanitize_text_field ( $_GET [ 'key' ] );
// 使用接收到的密钥从数据库中查找用户名
$get_username = $wpdb -> get_var ( $wpdb -> prepare ( "SELECT avatar FROM wp_autologin WHERE random_key = %s " , $received_key ) ) ;
// 检查查询是否返回结果,如果为假则抛出错误
if ( ! empty ( $get_username ) ) {
// 从用户名中获取用户信息,然后将其保存到变量
$user = get_user_by ( 'login' , $get_username ) ;
// 获取用户 id 然后将登录 cookie 设置到浏览器
wp_set_auth_cookie ( $user -> ID ) ;
// 为确保登录 cookie 已设置,我们再次检查。
foreach ( $_COOKIE as $name => $value ) {
// 查找前缀以 "wordpress_logged_in_" 开头的 cookie
if ( substr ( $name , 0 , strlen ( 'wordpress_logged_in_' ) ) == 'wordpress_logged_in_' ) {
// 如果登录 cookie 已设置,则重定向到帐户页面。
wp_redirect ( home_url ( '/account/' ) ) ;
} else {
// 如果没有设置,我们循环 URL 直到登录 cookie 被设置到浏览器
wp_redirect ( home_url ( '/autologin/?key=' . $received_key ) ) ;
}
}
} else {
echo '无效的认证密钥' ;
}
} else {
wp_redirect( home_url() );
}
} else {
wp_redirect( home_url('/account/') );
exit;
}
第 3 步:向网站 B 发送请求。
在本教程中,我们将使用 cURL 向网站 B 发送请求,您可以随意使用其他技术来发送 HTTP 请求。
// 定义我们将发送随机密钥请求的 URL
$api_url = "http://YOUR_WEBSITE_URL.com/autologin-api/" ;
// 如果您在网站 A 上使用 WordPress,您可以执行以下操作来获取当前登录的用户:
global $current_user ;
$user_login = $current_user -> user_login ;
// 设置参数
$params = array (
'action' => 'get_login_key' , // 网站 B 上的动作名称
'key' => '54321' ,
'user_login' => $user_login // 传递A网站当前登录用户的user_login
) ;
// 使用 cURL 发送数据
$ch = curl_init ( $api_url ) ;
curl_setopt($ch , CURLOPT_SSL_VERIFYPEER , 假);
curl_setopt ( $ch , CURLOPT_POST , 1 ) ;
curl_setopt ( $ch , CURLOPT_POSTFIELDS , http_build_query ( $params ) ) ;
curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , 1 ) ;
curl_setopt ( $ch , CURLOPT_HEADER , 0 ) ;
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 ) ;
$gbi_response = curl_exec ( $ch ) ;
curl_close ( $ch ) ;
// 解析响应
parse_str ( $gbi_response ) ;
// 将网站 B 的响应转换为数组
$data = json_decode ( $gbi_response , true ) ;
// 将接收到的密钥设置为变量
$key = $data [ 'key' ] ;
从这里,您现在可以生成将自动登录到网站 B 的链接。
echo '<a href = "http://YOUR_WEBSITE_URL.com/autologin/?' . $key . '">我的网站 B 帐户</a>' ;
温馨提示 : 非特殊注明,否则均为©李联华的博客网原创文章,本站文章未经授权禁止任何形式转载;来自:俄亥俄州·哥伦布 ,欢迎您的访问!
文章链接:https://www.lilianhua.com/auto-login-to-wordpress-from-another-website.html
文章链接:https://www.lilianhua.com/auto-login-to-wordpress-from-another-website.html
English (US)
Español (ES)
Português (PT)
Français (CA)
Español (MX)
Español (VE)
Español (CO)
Español (AR)
Português (BR)
Quechua (PE)
Guaraní (PY)
简体中文 (ZH)
繁體中文 (HK)
日本語 (JP)
한국어 (KR)
हिन्दी (HI)
Pilipino (PH)
ไทย (TH)
Tiếng Việt (VN)
Bahasa Melayu (MY)
Bahasa Indonesia (ID)
বাংলা (BD)
اردو (PK)
සිංහල (LK)
ភាសាខ្មែរ (KH)
English (UK)
Français (FR)
Deutsch (DE)
Italiano (IT)
Русский (RU)
Nederlands (NL)
Türkçe (TR)
Polski (PL)
Svenska (SE)
Norsk (NO)
Dansk (DK)
Suomi (FI)
Ελληνικά (GR)
Čeština (CZ)
Magyar (HU)
Română (RO)
Български (BG)
Српски (RS)
Українська (UA)


