从另一个网站自动登录到 WordPress
无需密码即可从网站 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>' ;
温馨提示 : 非特殊注明,否则均为©李联华的博客网原创文章,本站文章未经授权禁止任何形式转载;IP地址:3.145.201.122,归属地:俄亥俄州Dublin ,欢迎您的访问!
文章链接:https://www.ooize.com/auto-login-to-wordpress-from-another-website.html
文章链接:https://www.ooize.com/auto-login-to-wordpress-from-another-website.html