2017-07-10 2 views
6

私はAPIを構築しており、認証にはLaravel Passportを使用しています。Laravel Passportを使用してPassword Grant Clientのトークンを作成するにはどうすればよいですか?

APIはGoogleのモバイルアプリで使用されているため、パスワード授与クライアントを使用しています。

すべてがうまく動作し、ユーザーはログインしてアクセストークンを取得できます。ユーザーがサインアップできる登録エンドポイントを作成しました。この時点でアクセストークンを返すAPIも必要です。

ドキュメントを見ると、プログラムによってアクセストークンを作成する方法はありません。

私のコントローラにパスワード許可クライアントのアクセストークンを作成するにはどうすればよいですか?私は明らかに、それを得るために自分のAPIにHTTPリクエストをしたくない。

私はPersonal Access Grant Clientを使用し、createTokenをユーザモデルで呼び出すことができますが、それはアクセストークンが別のクライアントに関連付けられていることを意味します。これは私にとっては正しいとは思わない。

答えて

0

私は個人的なアクセスを許可するクライアントを使用して、ユーザーモデルにcreateTokenを呼び出すことができます知っているが、それはアクセストークンが

ないあなたはそれによって何を意味するかわから異なるクライアントに関連付けられていること、もっと説明できますか?

は今、これは理想的ではないですが、あなたは\League\OAuth2\Server\Grant\PasswordGrantを注入し、あなたはすべてのこれらのオブジェクトを構築しなければならない

respondToAccessTokenRequest(ServerRequestInterface $request 
          ResponseTypeInterface $responseType, 
          \DateInterval $accessTokenTTL) 

使用することができるかもしれませんが、これは任意のトークン情報を返すパスワードのための唯一のパブリックメソッドです。

2

私はPassportを数週間使ってきましたが、ドキュメントで見たことから、トークンを作成するために使用する多くのメソッドが公開されていません。 「自分のコントローラーにパスワード・グラント・クライアント用のアクセス・トークンを作成する」ことは容易ではありませんが、Route::dispatchを使用してトークンの要求をPassport Password Grantルートに転送することができます。

あなたは、あなたがパスワード・グラント・ルートへのアクセス権を持っているので、 AuthenticatesUsers形質を使用し、トークンの発行要求を作成するために使用しているコントローラでこれを行うと、パスワード・グラント・ルートへの要求ディスパッチするには、次の

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\Route; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 

class IssueTokensController extends Controller 
{ 

    use AuthenticatesUsers; 

    protected function issueApiToken(Request $request) 
    { 
     // forward the request to the oauth token request endpoint 
     $tokenRequest = Request::create(
      '/oauth/token', 
      'post' 
     ); 
     return Route::dispatch($tokenRequest); 
    } 

} 

この方法では、PassportとPassword Grant Clientを設定する必要があります。

この回答はレイモンドLagondaにより、同様の質問に別の答えのオフに基づいています - https://stackoverflow.com/a/40433000/4991377

1
Try something like this 
namespace App\Http\Controllers\Api; 

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use Illuminate\Support\Facades\Route; 
use App\User; 

class UserController extends Controller 
{ 

    //use AuthenticatesUsers; 
    protected function login(Request $request) 
    { 

     $request->request->add([ 
       'grant_type' => 'password', 
       'client_id'  => '3', 
       'client_secret' => '6BHCRpB4tpXnQvC1DmpT7CXCSz7ukdw7IeZofiKn', 
       'scope' => '*' 
      ]); 

     // forward the request to the oauth token request endpoint 
     $tokenRequest = Request::create('/oauth/token','post'); 
     return Route::dispatch($tokenRequest); 
    } 

} 
を見ます
関連する問題