Используйте Guzzle в Laravel для доступа к Wordpress API с помощью плагина аутентификации JWT.Ответ имеет пустое тело - PullRequest
0 голосов
/ 20 февраля 2019

Первый раз попробую это.В новом проекте Laravel 5.7 + GuzzleHttp я пытаюсь получить доступ к сайту Wordpress 5.0.3, используя аутентификацию JWT для WP-API для аутентификации.

У меня есть пользователь Wordpress иустановить пароль и протестировать URL-адрес API с помощью Postman, все в порядке.

{
    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9....",
    "user_email": "webmaster@wptest.com.au",
    "user_nicename": "aeaz62bxqx",
    "user_display_name": "Aeaz62BXqx"
}

На стороне Laravel Guzzle я тестирую тот же URI, как это:

$base_uri = $request->channel_url . '/wp-json/jwt-auth/v1/';

try {

    $client = new client();
    $session = $client->post($base_uri . 'token', [
        'headers' => [
            'Accept' => 'application/json',
        ],
        'form_params' => [
            'username' => $request->wp_user,
            'password' => $request->wp_password,
        ]
    ]);

    // GET BODY CONTENT HERE
    $body = json_decode($session->getBody()->getContents());

    // LOG HERE
    Log::info(print_r($session, true));   // SEE BELOW
    Log::info(print_r($body));   // EMPTY

    // GRAB TOKEN HERE
    $wp_token = $body->token;


    if ($session->getStatusCode() == '200') {

        $website->update([
            'wp_user' => $request->wp_user,
            'wp_password' => $request->wp_password,
            'wp_token' => $wp_token,
        ]);

    } else {

        return response()->json([
            'message' => 'We cannot log in to your Wordpress site at this time.'
        ], 401);

    }

} catch (RequestException $e) {
    $error = Psr7\str($e->getRequest());
    if ($e->hasResponse()) {
        $error .= '<br/>' . Psr7\str($e->getResponse());
    }
    return response()->json([
        'message' => 'There was an error connecting to Wordpress (U: ' . $request->wp_user . ', P: ' . $request->wp_password . ')'
    ], 401);
}

КогдаЯ выполняю вышеизложенное и регистрирую ответ, я получаю код состояния 200 и следующий, который, кажется, не содержит токен, user_email и т. Д. Если я намеренно изменяю имя пользователя или пароль, я получаю 403 запрещенный, поэтому я предполагаю, что он аутентифицирован, когда отвечает 200.

Любая помощь приветствуется.

[2019-02-20 11:42:03] local.INFO: 1  
[2019-02-20 11:42:03] local.INFO: GuzzleHttp\Psr7\Response Object
(
    [reasonPhrase:GuzzleHttp\Psr7\Response:private] => OK
    [statusCode:GuzzleHttp\Psr7\Response:private] => 200
    [headers:GuzzleHttp\Psr7\Response:private] => Array
        (
            [Server] => Array
                (
                    [0] => nginx/1.15.5
                )

            [Date] => Array
                (
                    [0] => Wed, 20 Feb 2019 11:42:03 GMT
                )

            [Content-Type] => Array
                (
                    [0] => application/json; charset=UTF-8
                )

            [Transfer-Encoding] => Array
                (
                    [0] => chunked
                )

            [Connection] => Array
                (
                    [0] => keep-alive
                )

            [X-Robots-Tag] => Array
                (
                    [0] => noindex
                )

            [Link] => Array
                (
                    [0] => <http://wptest.com.au/wp-json/>; rel="https://api.w.org/"
                )

            [X-Content-Type-Options] => Array
                (
                    [0] => nosniff
                )

            [Access-Control-Expose-Headers] => Array
                (
                    [0] => X-WP-Total, X-WP-TotalPages
                )

            [Access-Control-Allow-Headers] => Array
                (
                    [0] => Authorization, Content-Type
                )

            [Allow] => Array
                (
                    [0] => POST
                )

        )

    [headerNames:GuzzleHttp\Psr7\Response:private] => Array
        (
            [server] => Server
            [date] => Date
            [content-type] => Content-Type
            [transfer-encoding] => Transfer-Encoding
            [connection] => Connection
            [x-robots-tag] => X-Robots-Tag
            [link] => Link
            [x-content-type-options] => X-Content-Type-Options
            [access-control-expose-headers] => Access-Control-Expose-Headers
            [access-control-allow-headers] => Access-Control-Allow-Headers
            [allow] => Allow
        )

    [protocol:GuzzleHttp\Psr7\Response:private] => 1.1
    [stream:GuzzleHttp\Psr7\Response:private] => GuzzleHttp\Psr7\Stream Object
        (
            [stream:GuzzleHttp\Psr7\Stream:private] => Resource id #23
            [size:GuzzleHttp\Psr7\Stream:private] => 
            [seekable:GuzzleHttp\Psr7\Stream:private] => 1
            [readable:GuzzleHttp\Psr7\Stream:private] => 1
            [writable:GuzzleHttp\Psr7\Stream:private] => 1
            [uri:GuzzleHttp\Psr7\Stream:private] => php://temp
            [customMetadata:GuzzleHttp\Psr7\Stream:private] => Array
                (
                )

        )

)

1 Ответ

0 голосов
/ 20 февраля 2019

Ну, это сработало.

$body_content = json_decode($session->getBody(), true);

$token = $body_content['token'];

Я лучше понял это из здесь .

...