使用 Curl 从 Yii2 进行 WP 自动登录在首次加载时不起作用
Posted
技术标签:
【中文标题】使用 Curl 从 Yii2 进行 WP 自动登录在首次加载时不起作用【英文标题】:WP Auto Login From Yii2 using Curl not working on First Load 【发布时间】:2016-08-09 16:53:46 【问题描述】:我正在使用 YII2 的 WordPress 自动登录 下面是我的代码。
function.php (WP)
function autologin()
$strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/';
session_write_close();
$ch = curl_init("http://example.com/testregister/wplogin");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt( $ch, CURLOPT_COOKIE, $strCookie );
$response = curl_exec($ch);
curl_close($ch);
$newres = json_decode($response);
$email = $newres->email;
$password = $newres->password;
$result = $newres->result;
if($result == 1)
$creds = array();
$creds['user_login'] = $email;
$creds['user_password'] = $password;
$creds['remember'] = false;
$user = wp_signon( $creds );
if ( is_wp_error( $user ) )
echo $user->get_error_message();
else
wp_destroy_current_session();
wp_clear_auth_cookie();
do_action( 'wp_logout' );
// ADD CODE JUST BEFORE HEADERS AND COOKIES ARE SENT
add_action( 'init', 'autologin' );
testregister/wplogin:(YII2)
public function actionWplogin()
$userEmail = Yii::$app->user->identity->Email;
$userpw = Yii::$app->user->identity->Password;
$result = 1;
if($userEmail == "")
$result = 0;
return '"email":"'.$userEmail.'", "password":"'.$userpw.'" ,"result":"'.$result.'"';
每次加载 wordpress 网站时都会调用此函数。但第一次它没有登录到网站。
如果我使用wp_redirect( esc_url( home_url() ) );
,登录功能可以正常工作,但使用重定向后 wp-admin 无法正常工作。
【问题讨论】:
【参考方案1】:我找到了解决方案。 以下是 autologin() 函数中 functions.php 中的更改代码
if (!is_user_logged_in ())
$creds = array();
$creds['user_login'] = $email;
$creds['user_password'] = $password;
$creds['remember'] = false;
$user = wp_signon( $creds );
if ( is_wp_error( $user ) )
echo $user->get_error_message();
wp_redirect( esc_url( "http://" . $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] ) );
exit;
如果用户当时没有登录,则登录并重定向页面。 :)
【讨论】:
以上是关于使用 Curl 从 Yii2 进行 WP 自动登录在首次加载时不起作用的主要内容,如果未能解决你的问题,请参考以下文章
在 YII2 中使用自动注销,需要在再次登录后将用户重定向到用户在自动注销之前的相同 URL