我正在构建一个api驱动的Laravel 5.5应用程序。我想使用公共访问的api来处理UI驱动的请求。
我的问题是,在我的api auth中间件中,检测UI驱动请求(ajax请求)并允许它通过而不尝试验证api身份验证凭据的最佳方法是什么? (也许尝试验证csrf令牌?)
答案 0 :(得分:1)
您可以使用中间件为CSRF令牌添加其他检查,尽管Laravel默认在Web路由(Doc)上执行此操作。
例如添加此中间件以防止从ajax以外的任何内容进行访问: 运行此命令:
php artisan make:middleware AllowOnlyAjaxRequests
然后在中间件文件中:
namespace App\Http\Middleware;
use Closure;
class AllowOnlyAjaxRequests
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if(!$request->ajax()) {
// Handle the non-ajax request
return response('', 405);
}
return $next($request);
}
}
然后将'ajax' => \App\Http\Middleware\AllowOnlyAjaxRequests::class,
添加到routeMiddleware
app/Http/Kernel.php
数组中
用于检测请求的是通过ajax发送的,您可以使用$request->ajax()
代码。
如果你想排除某些URI来验证CSRF(谨慎行事),你可以this。
答案 1 :(得分:0)
您可以从VerifyCsrfToken中间件中检查csrf令牌中排除特定路由。
在验证控制器中的请求时将其排除后,如果$ request-> ajax()返回false,则可以验证csrf令牌。
您可以使用Session :: token()或csrf_token()函数验证csrf。
希望这会对你有所帮助。