【问题标题】:Laravel looses Session ( Authentication)Laravel 丢失会话(身份验证)
【发布时间】:2017-01-24 01:19:23
【问题描述】:

我对 Laravel 上的特定路线有疑问。每隔一次(有时是第一次)调用特定路由时,就会收到一个 401 错误,从身份验证中间件返回。

文件中间件/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', 'TaskController@events');
});

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 $.get 请求中调用。不知道为什么 Laravel 认为我是客人,然后就失去了 Session?

【问题讨论】:

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

标签: php laravel


【解决方案1】:

当您执行 ajax/api 请求时,laravel 认为您是访客,因为基于会话的身份验证不适用于此类调用。每当您使用 auth 中间件时,即使您已通过身份验证,您也会在 ajax 上获得 401。

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

【讨论】:

  • 我已通过身份验证。这不是作为服务运行(如 REST) - 我只是在 jquery 中(在 web 应用程序中)执行正常的 GET 请求
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 2018-05-10
  • 1970-01-01
  • 2023-02-19
  • 2019-07-26
  • 2012-09-29
相关资源
最近更新 更多