phplaravellaravel-passport

Laravel Passport Route [login] not defined


i use Laravel passport for auth

in route api.php

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

but when open localhost:8000/api/todos I see the following error

 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

I want if the user was not authenticated Do not redirect to any page and only see the page


Solution

  • Did you enter above-mentioned URL directly in browser search bar? If you did its wrong way because you also need to enter API token with your request__!!

    To check either request includes token or not make your own middleware.

    Command to create Middleware

    php artisan make:middleware CheckApiToken
    

    https://laravel.com/docs/5.6/middleware

    change middleware handle method to

    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);
    }
    

    Like This Your Url should be like this

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