Laravel Passport Route [login] 未定义
Laravel Passport Route [login] not defined
我使用 Laravel 护照进行身份验证
在路线中 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
如果用户未通过身份验证,我想
不重定向到任何页面,只看到页面
你是直接在浏览器搜索栏输入above-mentioned 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 并设置 Header Accept: application/json
否则 Laravel Passport 永远不会知道它是一个 API 客户端,因此会重定向到 Web 的 /login 页面。
请参阅下图以了解设置接受参数的位置:
您还必须添加另一个 header 键:X-Requested-With 和值:XMLHttpRequest
您还必须添加另一个 header 键:接受和值:application/json
检查您的 Header 放置请求
Authorization = Bearer {your token}
在 @Eki 回答的后面,
此错误是因为您没有在 headers 中设置 "Accept" 字段。
为避免此错误,添加一个优先验证的中间件以检查:
使用以下处理程序添加一个额外的中间件
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');
我使用 Laravel 护照进行身份验证
在路线中 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
如果用户未通过身份验证,我想 不重定向到任何页面,只看到页面
你是直接在浏览器搜索栏输入above-mentioned 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 并设置 Header Accept: application/json
否则 Laravel Passport 永远不会知道它是一个 API 客户端,因此会重定向到 Web 的 /login 页面。
请参阅下图以了解设置接受参数的位置:
您还必须添加另一个 header 键:X-Requested-With 和值:XMLHttpRequest
您还必须添加另一个 header 键:接受和值:application/json
检查您的 Header 放置请求
Authorization = Bearer {your token}
在 @Eki 回答的后面,
此错误是因为您没有在 headers 中设置 "Accept" 字段。
为避免此错误,添加一个优先验证的中间件以检查:
使用以下处理程序添加一个额外的中间件
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');