web-dev-qa-db-ja.com

Laravel Passport Route [login] not defined

私は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

ユーザーが認証されていない場合に必要です。どのページにもリダイレクトせず、ページのみを表示します

6
MJ7

ブラウザの検索バーに上記の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は次のようになります

http:// localhost:8000/api/todos?api_token = API_TOKEN_HERE

3
Ramzan Mahmood

Postmanを使用して、ヘッダーAccept:application/jsonを設定します。それ以外の場合Laravel Passportは、それがAPIクライアントであることを決して知らないため、Webの/ loginページにリダイレクトします。

17
Eki

また、別のヘッダーを追加する必要がありますKey:Acceptおよびvalue:application/json

4
Fazil Raza

配置するヘッダーリクエストを確認してください

承認= Bearer {your token}

3
Ayman Elshehawy

@ Eki answerの以下では、

このエラーは、ヘッダーに「許可」フィールドを設定しなかったためです。

このエラーを回避するには、認証を優先するミドルウェアを追加して以下を確認します:

  1. ハンドラーの下に追加のミドルウェアを追加します

    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);
    }
    
  2. app/Http/Kernel.phpで優先度を設定します

    protected $middlewarePriority = [
        ...
        \App\Http\Middleware\MyMiddleware::class, // new middleware
        \App\Http\Middleware\Authenticate::class,
        ...
    ];
    
  3. ルートに新しいミドルウェアを追加する

    Route::get('/todos', function(){
        return 'hello';
    })->middleware('MyMiddleware', 'auth:api');
    
0
Amin Shojaei

また、別のヘッダーKey:X-Requested-Withおよびvalue:XMLHttpRequestを追加する必要があります

0
Designer Coder