Laravel Passport аутентифицирует пользователя перед авторизацией

Я работаю над проектом, в котором сторонние приложения могут получать доступ к данным с сервера Laravel. Я также создал клиентское приложение в laravel для тестирования.

Следующий код запрашивает авторизацию и работает нормально.

Route::get('/applyonline', function () {
$query = http_build_query([
    'client_id' => 5,
    'redirect_uri' => 'http://client.app/callback',
    'response_type' => 'code',
    'scope' => '',
]);
return redirect('http://server.app/oauth/authorize?'.$query);
});

Как я могу аутентифицировать пользователя перед авторизацией? Прямо сейчас я могу получить доступ к серверу формы данных, используя этот код.

Route::get('/callback', function (Request $request) {
$http = new GuzzleHttp\Client;
$response = $http->post('http://server.app/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => 2,
        'client_secret' => 'fcMKQc11SwDUdP1f8ioUf8OJwzIOxuF8b2VKZyip',
        'username'=> '[email protected]',
        'password' => 'password',
    ],
]);

$data = json_decode((string) $response->getBody(), true);
$access_token = 'Bearer '. $data['access_token'];
$response =  $http->get('http://server.app/api/user', [
    'headers' => [
        'Authorization' =>  $access_token
    ]
]);

$applicant = json_decode((string) $response->getBody(), true);

return view('display.index',compact('applicant'));

});

Хотя приведенный выше код работает нормально, я не думаю, что это хороший способ запросить имя пользователя и пароль на стороне клиента.

Я хочу использовать этот поток (так же, как позволяет facebook)

  • Нажмите, чтобы получить данные с сервера
  • Введите имя пользователя и пароль
  • Авторизовать приложение
  • Данные доступа для аутентифицированного пользователя

person Nomi    schedule 02.04.2017    source источник


Ответы (1)


Что ж, это была глупая ошибка. Он отлично работает с типом гранта author_code. Моя ошибка заключалась в том, что я тестировал и сервер, и клиент в одном браузере без выхода из системы. Таким образом, клиент получал доступ к своим собственным данным с сервера. Также эта блок-схема действительно помогла мне понять процесс авторизации паспорта. http://developer.agaveapi.co/images/2014/09/Authorization-Code-Flow.png

 Route::get('/callback', function (Request $request) {
$http = new GuzzleHttp\Client;
$response = $http->post('http://server.app/oauth/token', [
    'form_params' => [
        'grant_type' => 'authorization_code',
        'client_id' => 5,
        'client_secret' => 'fcMKQc11SwDUdP1f8ioUf8OJwzIOxuF8b2VKZyip',
        'redirect_uri' => 'http://client.app/callback',
        'code' => $request->code,
    ],
]);
return json_decode((string) $response->getBody(), true);});
person Nomi    schedule 03.04.2017
comment
рад, что ты нашел его сам - person Nikhil Radadiya; 04.12.2017