WP set auth cookie usando Ajax não é salvo no navegador

4

Estamos criando um painel externo que usa dados do Wordpress, obviamente, usamos API WP REST v2

Queremos uma separação total do WP Dashboard tradicional, mas também desejamos fazer o login do usuário "nos bastidores" no WP Admin Dashboard, então podemos redirecionar o usuário para algumas páginas de UI do administrador do plug-in; devido à limitação da API REST do WP

Isso é o que fizemos, criamos um plug-in personalizado que tem a função createAuthkey abaixo que faz o login no usuário e cria uma chave (token).

A parte importante com que nos preocupamos é se o login for bem-sucedido (wp_authenticate ()), queremos também salvar o wp_auth_cookie no navegador, então mesmo se o usuário não estiver logado diretamente no / wp-admin, se agora o navegador digita as páginas admin do WP, queremos que eles estejam logados e, portanto, usamos wp_set_auth_cookie (), mas a resposta AJAX NÃO salva o cookie retornado nos recursos do navegador (mas retorna corretamente em resposta) e, portanto, quando o usuário é redirecionado para a página de administração do WP, eles são desconectados

function createAuthKey( WP_REST_Request $request )
{
    // Get login information
    $username   = $request->get_param( 'username' );
    $password   = $request->get_param( 'password' );

    $user = wp_authenticate( $username, $password );

    if ( is_wp_error( $user ) ) {
     return false;
    }

    $converter = new Encryption;
    $encoded = $converter->encode($username . ":" . $password);

    // Set Cookie: NOT SAVED TO BROWSER!!!
    wp_set_auth_cookie($user->ID, true);

    return ['key' => $encoded, 'cookie' => $_COOKIE];
}
    
por Nizar Blond 03.02.2016 / 23:12

1 resposta

1

Suponho que seu painel personalizado esteja em um domínio / subdomínio diferente da instalação do WordPress. Os cookies só podem ser definidos para o domínio atual.

Normalmente, os cookies não funcionam em vários domínios. Portanto, o seu painel não pode criar um cookie para o site WordPress. Teoricamente, é possível ignorar com algumas configurações do servidor, mas essa técnica deve ser suportada pelo navegador do usuário.

    
por Philipp 08.06.2017 / 22:55