2017-02-27 34 views
2

私はすべてのユーザーがアクセスできる公開ルートを持っています。 (/timeline)。
このアクションでは、ユーザーが認証されている場合は、彼が投稿を好きなら、私は彼を表示する必要があります。
auth:apiミドルウェアの場合は、$request->user()を使用して認証されたユーザーを取得できますが、auth:apiミドルウェアを使用しないと、ユーザーが正しいaccess_tokenを送信してもユーザーが認証されているかどうかを確認できません。
ミドルウェアなしでaccess_tokenが正しいことを確認し、コントローラでユーザーを認証するにはどうすればよいですか?認証なしでユーザーを認証する方法:laravel 5.3のapiミドルウェア

答えて

7

あなたのメソッドにガードを渡して、そのユーザーが特定のガードでログインしているかどうかを確認できます。

$request->user('api'); 
+0

ありがとうピーターパン。 –

+0

私の喜び。 ;) – PeterPan666

+3

リクエストオブジェクトなしで** Auth :: guard( 'api') - > user()**を使用することもできます。 – Gkiokan

3

あなたはauth:apiを使用していますので、JSONリクエストを話しているとします。アクセストークンは通常、リクエストのヘッダーに座っているので、あなたはちょうど私がコードに掘るための時間を持っていないこの

public function timeline(Request $request) { 
    if ($request->has('access_token') || $request->header('access_token')) { 
     $user = Auth::guard('api')->user(); 
    } 

    ... 
} 
+0

Eddyに感謝します。 –

+0

これは、メソッドにリクエストインスタンスを注入していない場合に、より便利です。ありがとう – iko

+0

これは、メソッドにリクエストインスタンスを注入していない場合に、より便利です。感謝 – iko

1

ようにそれを確認することができますが、認証を見ることができます:APIミドルウェア。そこでは、認証プロセスの仕組みがわかります。あなたが何かを発見していない場合、私に知らせてくださいと私は今夜それを調べ、私の答えを向上させます。あなたは、要求が、ここでLeague\OAuth2\Server\RecourceServer.php検証されることを確認できます深く掘るとき

<?php 

namespace Laravel\Passport\Http\Middleware; 

use Closure; 
use League\OAuth2\Server\ResourceServer; 
use Illuminate\Auth\AuthenticationException; 
use League\OAuth2\Server\Exception\OAuthServerException; 
use Symfony\Bridge\PsrHttpMessage\Factory\DiactorosFactory; 

class CheckClientCredentials 
{ 
    /** 
    * The Resource Server instance. 
    * 
    * @var ResourceServer 
    */ 
    private $server; 

    /** 
    * Create a new middleware instance. 
    * 
    * @param ResourceServer $server 
    * @return void 
    */ 
    public function __construct(ResourceServer $server) 
    { 
     $this->server = $server; 
    } 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    * 
    * @throws \Illuminate\Auth\AuthenticationException 
    */ 
    public function handle($request, Closure $next, ...$scopes) 
    { 
     $psr = (new DiactorosFactory)->createRequest($request); 

     try{ 
      $psr = $this->server->validateAuthenticatedRequest($psr); 
     } catch (OAuthServerException $e) { 
      throw new AuthenticationException; 
     } 

     foreach ($scopes as $scope) { 
      if (!in_array($scope,$psr->getAttribute('oauth_scopes'))) { 
      throw new AuthenticationException; 
      } 
     } 

     return $next($request); 
    } 
} 

:あなたがこれを見つけるファイルLaravel\Passport\Http\Middleware\CheckClientCredentials

。私の推測では、そこにあなたの答えを見つけることです。

+0

ありがとうIlyas。私はガードを通過することでピーターパンの助けを借りてそれをやりました。 –

関連する問題