2016-09-15 165 views
0

我在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认为我是一个客人,然后失去了会议?

+1

运行此命令:'php artisan route:list'并检查特定路由是否通过了处理会话的Web中间件。 –

回答

0

当你在做ajax/api请求时,laravel认为你是客人,因为基于会话的认证不适用于这种类型的调用。无论何时使用auth中间件,即使通过身份验证,您也会在ajax上获得401。

对于ajax/api调用,您需要某种类型的基于令牌的身份验证,它会在请求上发送Authentications标头,并为其处理身份验证的新中间件。

+0

我已通过身份验证。这不是作为服务运行(像REST) - 我只是在jQuery中做一个正常的GET请求(在一个web应用程序中) – derdida