私はLaravel authのパスポートを使用します
ルートapi.php
Route::get('/todos', function(){
return 'hello';
})->middleware('auth:api');
しかし、localhost:8000/api/todosを開くと、次のエラーが表示されます
InvalidArgumentException
Route [login] not defined.
* @return string
*
* @throws \InvalidArgumentException
*/
public function route($name, $parameters = [], $absolute = true)
{
if (! is_null($route = $this->routes->getByName($name))) {
return $this->toRoute($route, $parameters, $absolute);
}
throw new InvalidArgumentException("Route [{$name}] not defined.");
}
/**
* Get the URL for a given route instance.
*
* @param \Illuminate\Routing\Route $route
* @param mixed $parameters
* @param bool $absolute
* @return string
*
* @throws \Illuminate\Routing\Exceptions\UrlGenerationException
*/
protected function toRoute($route, $parameters, $absolute)
{
return $this->routeUrl()->to(
$route, $this->formatParameters($p
ユーザーが認証されていない場合に必要です。どのページにもリダイレクトせず、ページのみを表示します
ブラウザの検索バーに上記のURLを直接入力しましたか? request__ !!でAPIトークンも入力する必要があるため、間違った方法で行った場合
いずれかの要求を確認するには、トークンが含まれているか、独自のミドルウェアを作成しません。
ミドルウェアを作成するコマンド
php artisan make:middleware CheckApiToken
https://laravel.com/docs/5.6/middleware
ミドルウェアハンドルメソッドを変更します
public function handle($request, Closure $next)
{
if(!empty(trim($request->input('api_token')))){
$is_exists = User::where('id' , Auth::guard('api')->id())->exists();
if($is_exists){
return $next($request);
}
}
return response()->json('Invalid Token', 401);
}
このようにあなたのURLは次のようになります
Postmanを使用して、ヘッダーAccept:application/jsonを設定します。それ以外の場合Laravel Passportは、それがAPIクライアントであることを決して知らないため、Webの/ loginページにリダイレクトします。
また、別のヘッダーを追加する必要がありますKey:Acceptおよびvalue:application/json
配置するヘッダーリクエストを確認してください
承認= Bearer {your token}
@ Eki answerの以下では、
このエラーは、ヘッダーに「許可」フィールドを設定しなかったためです。
このエラーを回避するには、認証を優先するミドルウェアを追加して以下を確認します:
ハンドラーの下に追加のミドルウェアを追加します
public function handle($request, Closure $next)
{
if(!in_array($request->headers->get('accept'), ['application/json', 'Application/Json']))
return response()->json(['message' => 'Unauthenticated.'], 401);
return $next($request);
}
app/Http/Kernel.phpで優先度を設定します
protected $middlewarePriority = [
...
\App\Http\Middleware\MyMiddleware::class, // new middleware
\App\Http\Middleware\Authenticate::class,
...
];
ルートに新しいミドルウェアを追加する
Route::get('/todos', function(){
return 'hello';
})->middleware('MyMiddleware', 'auth:api');
また、別のヘッダーKey:X-Requested-Withおよびvalue:XMLHttpRequestを追加する必要があります