我正在开发一个带有laravel 5.2.31的项目。我想构建一个api服务,并希望用户api_token
来授权用户。所以这是我的步骤:
首先,我在api.php
目录中创建app\Http
。我修改了App\Providers\RouteServiceProvider
:
/**
* Define the routes for the application.
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
public function map(Router $router)
{
$this->mapWebRoutes($router);
//load api.php routes
$this->mapApiRoutes($router);
//
}
/**
* Define the "web" routes for the application.
*
* These routes all receive session state, CSRF protection, etc.
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
protected function mapWebRoutes(Router $router)
{
$router->group([
'namespace' => $this->namespace, 'middleware' => 'web',
], function ($router) {
require app_path('Http/routes.php');
});
}
protected function mapApiRoutes(Router $router)
{
$router->group([
'namespace' => $this->namespace, 'middleware'=>'api',
], function ($router) {
require app_path('Http/api.php');
});
}
其次,我将config/auth.php
默认保护更改为api
。
第三,我在我的用户表中添加了api_token
列。
最后,我在api.php
中定义了一条路线来测试:
Route::get('/test',function(){
$user = Auth::user();
return $user;
})->middleware('auth:api');
我发现了一个问题。如果我将api_token作为url参数或header参数传递,并且值正确,如http://localhost/test?api_token=xxxxx
,则可以正常工作。但如果在数据库中找不到api_token的匹配值,我将得到404 page not found
响应不是422响应。有人可以告诉我为什么?
答案 0 :(得分:0)
如果您尝试添加一些条件,例如
,它可能会有效 If(isset($user)){
return $user;
}
return "not found";
可能会解决您的问题。