laravel 普通和 ajax 调用的独立过滤器
laravel separate filters for normal and ajax calls
我在想我们是否可以在 Laravel 中为普通和 ajax 调用设置单独的过滤器。
我的情况是这样的。每个请求都经过一个过滤器(针对特定的控制器)。如果用户未登录,过滤器只是重定向到一个未登录的页面,提示用户再次登录。好吧,如果未登录的用户输入 url 并被重定向,这就可以正常工作。
但是当发送 AJAX 请求时,结果将包含未记录的页面。我必须在结果中执行字符串搜索以检查未登录页面上是否存在某些字符串。
是否有任何其他更好的方法来检查 AJAX 用户是否未登录。
谢谢
如果是 Lavavel 5,您可以使用 $request->ajax()
实现:
if (\Auth::guest())
{
if ($request->ajax())
{
return response('Unauthorized.', 401);
}
else
{
return redirect()->guest('login');
}
}
然后,在您 javascript 的呼叫中,您只需阅读响应代码 (401)。使用 Laravel 4,您可以使用 Request::ajax()
来验证当前请求是否来自 ajax。
内置auth
middleware does this for you automatically.
通过将其添加到您的路线来使用它:
Route::get('foo', ['middleware' => 'auth', 'uses' => 'FooController@foo']);
我在想我们是否可以在 Laravel 中为普通和 ajax 调用设置单独的过滤器。
我的情况是这样的。每个请求都经过一个过滤器(针对特定的控制器)。如果用户未登录,过滤器只是重定向到一个未登录的页面,提示用户再次登录。好吧,如果未登录的用户输入 url 并被重定向,这就可以正常工作。
但是当发送 AJAX 请求时,结果将包含未记录的页面。我必须在结果中执行字符串搜索以检查未登录页面上是否存在某些字符串。
是否有任何其他更好的方法来检查 AJAX 用户是否未登录。
谢谢
如果是 Lavavel 5,您可以使用 $request->ajax()
实现:
if (\Auth::guest())
{
if ($request->ajax())
{
return response('Unauthorized.', 401);
}
else
{
return redirect()->guest('login');
}
}
然后,在您 javascript 的呼叫中,您只需阅读响应代码 (401)。使用 Laravel 4,您可以使用 Request::ajax()
来验证当前请求是否来自 ajax。
内置auth
middleware does this for you automatically.
通过将其添加到您的路线来使用它:
Route::get('foo', ['middleware' => 'auth', 'uses' => 'FooController@foo']);