如何在Laravel中验证API请求?

时间:2017-04-03 13:53:03

标签: laravel api authentication request

我目前正在使用Laravel 5(.4)构建某种基于帖子的Web应用程序。我决定异步加载每个帖子的评论部分(并定期刷新)。经过一些研究后,我决定编写一个小的集成 REST API (使用 Laravel的api路由)来回答通过 AJAX 。
但是,如果验证传入的请求,我将面临问题。以请求发表评论为例。你究竟怎么建议这样做?

2 个答案:

答案 0 :(得分:0)

" Passport包含一个身份验证防护,可以验证传入请求的访问令牌。一旦配置了api guard以使用护照驱动程序,您只需要在需要有效访问令牌的任何路由上指定auth:api中间件" - 来自Laraven文档。
显然我必须配置护照,然后配置auth:api中间件以使用护照驱动程序。如果我错了,请纠正我,请:)

答案 1 :(得分:0)

如果您要从浏览器发出AJAX请求并且您已登录,那么您不需要使用Laravel Passport令牌。 您可以定义某些路由,这些路由将像web这样的请求使用authwebapi/comments/get中间件。

Route::group(['middleware' => ['web','auth]], function () {
        Route::get('webapi/comments/get', 'CommentsController@get');
}

并在网络请求中使用Auth Facade,例如Auth::check(), Auth::user()等,并以JSON格式返回数据。

class CommentsController extends Controller
{
    public function get(Request $request)
    {
         if($request->acceptsJson()){
            $data = array();

            // add data

            return response()->json([
                   "data"=> $data,
                   "status" => true
                  ]);
         }else{
            return abort(404);
         }

    }
}

您还可以将Accept标头作为application/json发送到AJAX请求中,并在控制器中检查是否请求$request->acceptsJson(),并决定在从浏览器地址栏加载网址或显示请求时显示内容作为AJAX。

Laravel Passport令牌在没有会话且管理cookie的情况下非常有用。

希望这有助于:)