我没有使用 Passort 或任何类似的库,因为它是一个内部 API,仅提供 VueJS 从数据库获取内容的服务。
如果 API 不是无状态的,这意味着已知用户使用标准会话 cookie 登录,那么您可以只使用默认值'web'
API 路由的中间件。
在默认情况下RouteServiceProvider
,改变mapApiRoutes
函数来使用web
中间件代替:
protected function mapApiRoutes()
{
Route::prefix('api')
// ->middleware('api')
->middleware('web')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
话虽这么说,你确实应该将 API 路由放在默认路由后面'auth'
中间件,因为默认情况下它们不受限制。
In the routes/api.php
file:
Route::group(['middleware' => 'auth'], function() {
Route::get('/latest', 'InternalApiController@latest');
});
如果您想确保它是一个 AJAX 请求,您可以创建一个简单的中间件来检查该请求是否具有X-Requested-With
标头设置为XMLHttpRequest
.
class RequestIsAjax
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!$request->ajax()) {
return redirect()->route('login.index');
}
return $next($request);
}
}
并将其注册在$routeMiddleware
数组里面的\App\Http\Kernel
class.
protected $routeMiddleware = [
'ajax' => \App\Http\Middleware\RequestIsAjax::class,