2017-02-02 9 views
3

Laravel과 API REST를했는데 이제이를 사용하려고합니다. API에서 사용자를 인증해야하며 Password Grant 메소드를 사용하고 있습니다. 사용자를 올바르게 인증 할 수는 있지만 액세스 토큰을 얻을 수는 있지만 사용중인 응용 프로그램에서 액세스 토큰을 사용하여 인증 된 사용자를 검색하는 방법은 없습니다. 인증 된 사용자에게 Laravel Passport를 부여하고 비밀번호를 부여하십시오.

는이 같은 경로로 API에서 시도하지 :

Route::get('/user', function(Request $request) { 
    $user = $request->user(); 
    // Even with 
    $user = Auth::user(); 

    return $user; 
}); 

없음 주사위. 나는 여권 코드를 읽었으나 알아낼 수는 없다.

  • I : 내 생각 엔 Laravel 여권 교부 형의 종류를 제공하지 않는 것 때문에 나는이 일을 명확히하기 위해 ... 새로운 가드 유형 또는 무언가를 지정

    을해야한다는 것입니다 oAuth2 서버 인 API REST 애플리케이션이 있습니다.

  • API REST를 사용하는 다른 응용 프로그램이 있습니다.
  • 워크 플로를 알고 있습니다. 필자의 경우, 암호 사용 권한을 통해 사용자 응용 프로그램에서 사용자 자격 증명을 얻은 다음 grant_type에서 암호을 지정하는/oauth/토큰에 대한 요청을 내 클라이언트 자격 증명과 함께 제공합니다. 나는 그들이 생성 된 확신 "PHP 장인 여권 : 클라이언트가을 --password"합니다 (--password 옵션을 참고)
  • 나는 아무런 문제 토큰 액세스 할 수 있습니다. 지금 필요한 것은 API REST에서 방금 인증 한 사용자의 JSON 표현을 얻는 것입니다. 하지만 여기에 문제가 있습니다 : 액세스 토큰이 있습니다. 내가 사용자와 관련시킬 수있는 것은 아무것도 없다.

또는 그럴 수 있습니까? 아마 I는 인증 된 사용자 ... * 전구가 온 상기 생성 된 액세스 토큰을 관련시키는 암호 허가 요청을 인증하는 방법을 확장 할 수 *

소비 애플리케이션 테스트 코드 :

try { 
    $client = new Client(); 
    $result = $client->post('https://myapi.com/oauth/token', [ 
     'form_params' => [ 
      'grant_type' => 'password', 
      'client_id' => '5', 
      'client_secret' => 'my_secret', 
      'username' => 'user_I_am_authenticating', 
      'password' => 'the_user_password', 
      'scope' => '', 
     ] 
    ]); 
    $access_token = json_decode((string) $result->getBody(), true)['access_token']; 
    $result = $client->get('https://myapi.com/client/user', [ 
     'headers' => [ 
      'Content-Type' => 'application/json', 
      'Accept' => 'application/json', 
      'Authorization' => "Bearer $access_token", 
     ] 
    ]); 

    return (string) $result->getBody(); 
} catch (GuzzleException $e) { 
    return "Exception!: " . $e->getMessage(); 
} 

https://myapi.com/client/user 경로는 API에서 테스트하기 위해 만든 경로입니다. 이 경로는 다음과 같이 정의됩니다.

Route::get('/user', function(Request $request) { 
    return $request->user(); 
}); 

Now. 나는 이것이 작동하지 않는다는 것을 안다. 이것이 내가 원하는 것입니다. access_token/bearer_token을 가진 요청을하는 사용자를 알 수 있습니다.

감사합니다.

+0

내 게시물에 "안녕하세요"또는 "안녕하세요"라고 말할 수 없습니다! 하하 –

+0

클라이언트 측 코드와 오류를 추가 하시겠습니까? 404인가요? –

+0

코드를 추가 할 수 있습니다. 그러나 내가 말했듯이, 나는 어떤 오류도 없다. API에서 원하는 경로로 요청합니다. API 경로에서 클라이언트를 대신하여 클라이언트가 요청을한다는 것을 알고 싶습니다. –

답변

0

요청할 때마다 액세스 토큰을 다시 전달해야합니다. 이 부분에 대한 설명서를 확인하십시오. here

+0

물론. 나는 이미 그것을하고있다. 좀 더 많은 코드로 내 질문을 업데이트 할 것입니다. 내가 분명하지 않으면 미안해. –

4

해당 미들웨어를 잊어 버렸습니다.당신이 auth 미들웨어를 언급하지 않는 경우

Route::get('/user', function(Request $request) { 
    return Auth::user(); 
})->middleware('auth:api'); 

인증 흐름

는 해고되지 않습니다. 그래서 null이됩니다.