Laravel丢失会话(身份验证)
问题描述:
我在Laravel上遇到特定路由问题。每当有病人拨打特定的路线时,第二次(有时在第一次),生病会得到401认证中间件返回的错误。Laravel丢失会话(身份验证)
文件中间件/ Authenticate.php
class Authenticate
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @param string|null $guard
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->guest()) {
if ($request->ajax() || $request->wantsJson()) {
return response('Unauthorized.', 401); // THIS IS CALLED
} else {
return redirect()->guest('login');
}
}
return $next($request);
}
从这个路线:
Route::group(['middleware' => 'auth'], function() {
.........
Route::get('events', '[email protected]');
});
TaskController.php
public function events(Request $request) {
$time_from = $request->start;
$time_to = $request->end;
$events = array();
$user_id = Auth::user()->id;
.....
return response()->json($events, 200);
}
所有的一个jQuery $不用彷徨请求调用。我不知道为什么Laravel认为我是一个客人,然后失去了会议?
答
当你在做ajax/api请求时,laravel认为你是客人,因为基于会话的认证不适用于这种类型的调用。无论何时使用auth中间件,即使通过身份验证,您也会在ajax上获得401。
对于ajax/api调用,您需要某种类型的基于令牌的身份验证,它会在请求上发送Authentications标头,并为其处理身份验证的新中间件。
+0
我已通过身份验证。这不是作为服务运行(像REST) - 我只是在jQuery中做一个正常的GET请求(在一个web应用程序中) – derdida
运行此命令:'php artisan route:list'并检查特定路由是否通过了处理会话的Web中间件。 –