私はすべてのユーザーがアクセスできる公開ルートを持っています。 (/timeline
)。
このアクションでは、ユーザーが認証されている場合は、彼が投稿を好きなら、私は彼を表示する必要があります。
auth:api
ミドルウェアの場合は、$request->user()
を使用して認証されたユーザーを取得できますが、auth:api
ミドルウェアを使用しないと、ユーザーが正しいaccess_tokenを送信してもユーザーが認証されているかどうかを確認できません。
ミドルウェアなしでaccess_tokenが正しいことを確認し、コントローラでユーザーを認証するにはどうすればよいですか?認証なしでユーザーを認証する方法:laravel 5.3のapiミドルウェア
2
A
答えて
7
あなたのメソッドにガードを渡して、そのユーザーが特定のガードでログインしているかどうかを確認できます。
$request->user('api');
3
あなたはauth:api
を使用していますので、JSONリクエストを話しているとします。アクセストークンは通常、リクエストのヘッダーに座っているので、あなたはちょうど私がコードに掘るための時間を持っていないこの
public function timeline(Request $request) {
if ($request->has('access_token') || $request->header('access_token')) {
$user = Auth::guard('api')->user();
}
...
}
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。私はガードを通過することでピーターパンの助けを借りてそれをやりました。 –
関連する問題
- 1. laravel 5.3でミドルウェアの認証:apiでAPIルートにアクセスする方法は?
- 2. Laravel 5.3ミドルウェア:ミドルウェアを認証目的で作成する
- 3. Laravel 5.3認証なしのRESTFul API
- 4. Laravelゲストのミドルウェアとユーザー認証
- 5. NodeJSユーザー認証ミドルウェア
- 6. Hestoマルチ認証でLaravel 5.3の認証パラメータを変更する
- 7. Laravel 5.2 - ミドルウェアの認証
- 8. Laravel 5.3の認証ルートは/
- 9. Laravel 5.3認証後のリダイレクト
- 10. Laravel編集認証ミドルウェア
- 11. Laravel 5.2は、認証ミドルウェアが
- 12. Laravelの認証ミドルウェアをカスタマイズする
- 13. Laravelセッションベースの認証:apiミドルウェアが動作しない
- 14. 他のAPIからのLaravel 5.3認証、データベースなし
- 15. ユーザー認証ではなく、5.3
- 16. ユーザーの認証 - Laravel
- 17. Laravelの認証ユーザー
- 18. laravelのAPI認証
- 19. Laravelでの複数認証5.3
- 20. APIキー認証とユーザー認証のベストプラクティス
- 21. ユーザー認証Laravel 5.2
- 22. Laravelで電子メールなしでユーザーを認証する
- 23. laravelサブドメインの認証ユーザーを確認する方法は?
- 24. セッションからユーザーIDを取得する - laravel 5.3認証
- 25. ミドルウェアの複数の認証。 Laravel 5.4
- 26. ユーザー認証なしでAPIエンドポイントを保護する方法
- 27. Laravel 5.3 - 認証が壊れている
- 28. ルーメン5.3認証
- 29. api_tokenを使用したLaravel 5.3とAPI認証
- 30. laravel 5.3認証ユーザープロバイダの問題
ありがとうピーターパン。 –
私の喜び。 ;) – PeterPan666
リクエストオブジェクトなしで** Auth :: guard( 'api') - > user()**を使用することもできます。 – Gkiokan