想要在创建logged_in cookie之后调用函数,但我的代码存在问题。
我覆盖了可插入函数wp_set_auth_cookie并在创建cookie之后添加了一个钩子:
function wp_set_auth_cookie( $user_id, $remember = false, $secure = '', $token = '' ) {
//SOME INTERESTING CODE //
/**
* Fires immediately before the secure authentication cookie is set.
*
* @since 2.6.0
*
* @param string $logged_in_cookie The logged-in cookie.
* @param int $expire Login grace period in seconds. Default 43,200 seconds, or 12 hours.
* @param int $expiration Duration in seconds the authentication cookie should be valid.
* Default 1,209,600 seconds, or 14 days.
* @param int $user_id User ID.
* @param string $scheme Authentication scheme. Default 'logged_in'.
*/
do_action( 'set_logged_in_cookie', $logged_in_cookie, $expire, $expiration, $user_id, 'logged_in' );
setcookie($auth_cookie_name, $auth_cookie, $expire, PLUGINS_COOKIE_PATH, COOKIE_DOMAIN, $secure, true);
setcookie($auth_cookie_name, $auth_cookie, $expire, ADMIN_COOKIE_PATH, COOKIE_DOMAIN, $secure, true);
setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, COOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true);
if ( COOKIEPATH != SITECOOKIEPATH )
setcookie(LOGGED_IN_COOKIE, $logged_in_cookie, $expire, SITECOOKIEPATH, COOKIE_DOMAIN, $secure_logged_in_cookie, true);
do_action( 'ic_logged_in_cookie_just_set');
}
endif;
正如您所看到的,在最后,我使用钩子“ ic_logged_in_cookie_just_set ”执行所有函数,所以通常,在创建cookie之后,它将执行我的函数。
但是有一个问题:使用cookie的钩子触发的函数无法访问cookie,所以我的远程应用程序将收到一个未定义的cookie而不是logged_in cookie。
我的远程应用程序正在运行,因为当我使用'init'执行我的操作时,它会正常工作。
我的代码:
class IC_Chat {
public function __construct()
{
//add_action( 'init', array($this, 'ic_show_chat_bar'));
add_action( 'ic_logged_in_cookie_just_set', array($this, 'ic_show_chat_bar'));
}
public function ic_show_chat_bar() {
//if(is_user_logged_in() && !is_admin()){
$token = $this->askForToken();
//}
}
private function askForToken(){
$url = 'http://10.1.1.232:4000/getToken';
$cookieLoggedInName = "wordpress_logged_in_".md5( get_site_option("siteurl")) ;
// If ext/hash is not present, compat.php's hash_hmac() does not support sha256.
if (function_exists( 'hash' ) )
$body = array("encryption" => "sha256");
else
$body = array("encryption" => "sha1");
$args = array(
'user-agent' => 'Wordpress',
'cookies' => array(
$cookieLoggedInName =>$_COOKIE[$cookieLoggedInName]
)
);
$resp = wp_remote_post( $url, $args );
// $response_code = wp_remote_retrieve_response_message( $response );
if ( is_wp_error($resp) ) {
etc...
}
}
}
我的钩子也工作,因为我在远程应用程序日志中收到了一篇http帖子。
那么我怎样才能解决问题,在创建cookie的时候执行我的函数?