Использовать аутентификацию паспорта Laravel в API

Я использую в своем проекте аутентификацию Laravel Passport. Я хочу использовать аутентификацию паспорта только в API, поэтому я пытаюсь сгенерировать client_id и client_secret, используя приведенный ниже код, но он возвращает NULL

Я написал этот код в своих маршрутах / api.php

Route::post('/gen_client', function () {
    $http = new GuzzleHttp\Client([
        'headers' => [ 'Content-Type' => 'application/json' ]
    ]);

    $response = $http->post(url('/') . '/oauth/clients',
    ['body' => json_encode(
        [
            'id' => '[email protected]', 
            'name' => 'Ovais2',
            'redirect' => url('/') . '/callback'
        ]
        )
    ]
);

    $response_body = json_decode((string)$response->getBody(), true); 
    var_dump($response_body);
});

Предположим, если я сгенерировал client_id с помощью командной строки php artisan passport:client

теперь я хочу авторизованный токен доступа, но он возвращает NULL

Route::post('callback', function (Request $request) {
    $http = new GuzzleHttp\Client();  
    $oauth_client = DB::table('oauth_clients')->where('id', '=', '[email protected]')->first();   
    $response = $http->post(url('/') . '/oauth/token', [        
        'form_params' => [
            'grant_type' => 'authorization_code',
            'client_id' => $oauth_client->id,
            'client_secret' => $oauth_client->secret,
            'redirect_uri' => url('/') . '/callback',
            'code' => $request->code,
        ],
    ]);  
    $response_body = json_decode((string)$response->getBody(), true);  
    var_dump($response_body);
    $access_token = $response_body['access_token'] ;  
    $refresh_token = $response_body['refresh_token'];  
});

dd(url('/') . '/oauth/clients'); пришлите мне результат:

http://localhost/project/public/oauth/clients

dd($response); пришлите мне результат:

Response {#224
  -reasonPhrase: "OK"
  -statusCode: 200
  -headers: array:7 [
    "Date" => array:1 [
      0 => "Sat, 29 Oct 2016 10:19:24 GMT"
    ]
    "Server" => array:1 [
      0 => "Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/7.0.9"
    ]
    "X-Powered-By" => array:1 [
      0 => "PHP/7.0.9"
    ]
    "Cache-Control" => array:1 [
      0 => "no-cache"
    ]
    "Set-Cookie" => array:1 [
      0 => "laravel_session=eyJpdiI6Ikx5WXJpTEFvZ0ZiNFwvbFwvYWZRQWxEZz09IiwidmFsdWUiOiJVM29lbTNYSnZwdld5ZHdVRk1IK1hJbG9RenNQa1owS1lRMEFYQ3lVamluV3JcL2RwaVQyRkpsZzkwQ082OU94QkJiSUpGQTZpeTMxWjdpMEtCZ1Byc3c9PSIsIm1hYyI6IjQwNTcwZTQ4YzQ2OGIwODQ5Y2NjMzBiMmIyNmI5MTVkNTY0ZjI0OGQ1Y2M1NTVjYTljNmU4Mjk2Nzg0Yjk2MmMifQ%3D%3D; expires=Sat, 29-Oct-2016 12:19:24 GMT; Max-Age=7200; path=/; HttpOnly"
    ]
    "Content-Length" => array:1 [
      0 => "4709"
    ]
    "Content-Type" => array:1 [
      0 => "text/html; charset=UTF-8"
    ]
  ]
  -headerNames: array:7 [
    "date" => "Date"
    "server" => "Server"
    "x-powered-by" => "X-Powered-By"
    "cache-control" => "Cache-Control"
    "set-cookie" => "Set-Cookie"
    "content-length" => "Content-Length"
    "content-type" => "Content-Type"
  ]
  -protocol: "1.1"
  -stream: Stream {#222
    -stream: stream resource @234
      wrapper_type: "PHP"
      stream_type: "TEMP"
      mode: "w+b"
      unread_bytes: 0
      seekable: true
      uri: "php://temp"
      options: []
    }
    -size: null
    -seekable: true
    -readable: true
    -writable: true
    -uri: "php://temp"
    -customMetadata: []
  }
}

Кто-нибудь может мне помочь? Жду положительного ответа.


person okconfused    schedule 29.10.2016    source источник
comment
Вы пытались сделать dd (url ('/'). '/ Oauth / clients'), чтобы убедиться, что это соответствует тому, что, как я полагаю, вы хотите от domain.com/oauth/clients? Вы пробовали dd($response); и dd($response->getBody());? Если нет, попробуйте их и дайте нам знать, каков результат.   -  person alex-greaves    schedule 29.10.2016
comment
dd(url('/') . '/oauth/clients'); пришлите мне результат: http://localhost/project/public/oauth/clients   -  person okconfused    schedule 29.10.2016
comment
Это правильный URL-адрес, на который вы хотите отправить сообщение? Вы также пробовали dd($response); и dd($response->getBody());? Если да, пришлите, пожалуйста, результат для них.   -  person alex-greaves    schedule 29.10.2016
comment
Ответ очень большой, поэтому я отправляю вас по частям dd ($ response); пришлите мне вывод: 'Response {# 224 -reasonPhrase: OK -statusCode: 200 -headers: array: 7 [Date = ›array: 1 [0 =› Sat, 29 Oct 2016 10:19:24 GMT] Server = › массив: 1 [0 = ›Apache / 2.4.23 (Win32) OpenSSL / 1.0.2h PHP / 7.0.9] X-Powered-By =› массив: 1 [0 = ›PHP / 7.0.9] Cache-Control = ›Array: 1 [0 =› no-cache] '   -  person okconfused    schedule 29.10.2016
comment
«Set-Cookie => Массив: 1 [0 => laravel_session = eyJpdiI6Ikx5WXJpTEFvZ0ZiNFwvbFwvYWZRQWxEZz09IiwidmFsdWUiOiJVM29lbTNYSnZwdld5ZHdVRk1IK1hJbG9RenNQa1owS1lRMEFYQ3lVamluV3JcL2RwaVQyRkpsZzkwQ082OU94QkJiSUpGQTZpeTMxWjdpMEtCZ1Byc3c9PSIsIm1hYyI6IjQwNTcwZTQ4YzQ2OGIwODQ5Y2NjMzBiMmIyNmI5MTVkNTY0ZjI0OGQ1Y2M1NTVjYTljNmU4Mjk2Nzg0Yjk2MmMifQ% 3D% 3D; expires = Sat, 29-Oct-2016 12:19:24 GMT; Максимальный возраст = 7200; путь = /; HttpOnly] Content-Length = ›массив: 1 [0 =› 4709] Content-Type = ›массив: 1 [0 =› text / html; charset = UTF-8]] '   -  person okconfused    schedule 29.10.2016
comment
`-headerNames: array: 7 [date =› Date server = ›Сервер x-powered-by =› X-Powered-By cache-control = ›Cache-Control set-cookie =› Set-Cookie content-length = ›Контент -Length content-type = ›Content-Type]`   -  person okconfused    schedule 29.10.2016
comment
это общий выход   -  person okconfused    schedule 29.10.2016
comment
Я отредактировал сообщение с выводом   -  person okconfused    schedule 29.10.2016
comment
Спасибо, не могли бы вы также прислать результаты dd($response->getBody());? Необходимо проверить, что access_token действительно является частью массива. Также в вашем вопросе вы упомянули, что он возвращает NULL, это $ response_body, который возвращает NULL или $ response_body ['access_token']?   -  person alex-greaves    schedule 29.10.2016
comment
выше - ответ dd($response->getBody()); и $ response_body, отправивший мне NULL   -  person okconfused    schedule 29.10.2016


Ответы (2)


Мой тимлид решил эту проблему. Пожалуйста, проверьте ссылку ниже:

Паспорт Laravel 5.3 и маршруты API

person okconfused    schedule 03.11.2016

Причина, по которой вы получаете NULL для $ response_body, заключается в том, что когда вы устанавливаете переменную, которую вы вводите, намекая на $ response-> getBody () как строку, то, что вы фактически получаете, является экземпляром Stream. Также вы пытаетесь json_decode класс, а не строку json. $response_body = json_decode((string)$response->getBody(), true); Если вы хотите получить ответ в формате JSON, вы можете $response_body = $response->json();

Для получения дополнительной информации эти разделы документации GuzzleHttp будут действительно полезны: http://guzzle3.readthedocs.io/http-client/response.html#response-body и http://guzzle3.readthedocs.io/http-client/entity-bodies.html

person alex-greaves    schedule 29.10.2016
comment
Я получаю эту ошибку. Вызов неопределенного метода GuzzleHttp \ Psr7 \ Response :: json () - person okconfused; 29.10.2016
comment
Извините, я предположил, что вы будете использовать Guzzle 5.3, который включает этот метод в свой ответ, есть ли конкретная причина, по которой вы не используете Guzzle 5.3? Возможно, вы можете просто сделать dd(json_decode($response->getBody()));, чтобы убедиться, что он не возвращает NULL, если это так, стоит проверить свою конечную точку, чтобы убедиться, что вы что-то возвращаете. - person alex-greaves; 29.10.2016
comment
dd(json_decode($response->getBody())); возврат NULL - person okconfused; 29.10.2016