Laravel - 保护 API 路由

Eli*_*lib 2 api laravel vue.js

我有使用 VUEJS 作为前端的 Laravel 应用程序,我通过创建 API 路由来获取数据。因此,例如获取帖子数据的路线将是http://localhost/api/posts

保护我的路线的最佳方法是什么?

我在 laravel 文档上看到有:API 认证https://laravel.com/docs/5.8/api-authentication 也是 Passport https://laravel.com/docs/5.8/passport

例如,现在任何用户都可以访问路由http://localhost/api/posts ,他将获得包含所有帖子数据的 json。

我想保护它并只允许来自我的 VUEJS 组件的内部 api 请求来获取数据

Jac*_*pia 6

我假设您将使用 Laravel auth 路由进行身份验证,并且在身份验证之后,您到达的下一个视图是包含所有 Vue 组件的视图。

解决方案很简单,即使是在文档上,也应该说明必要的步骤。

我们需要:

  1. 添加护照 composer require laravel/passport
  2. 进行迁移 php artisan migrate
  3. 安装护照 php artisan passport:install

第四步比较复杂。我们需要打开我们的 User.php 模型文件。首先我们需要导入 HasApiTokens 并告诉模型使用它。

use Laravel\Passport\HasApiTokens;

class User extends Authenticatable

{

    use HasApiTokens, Notifiable;

    .......

}
Run Code Online (Sandbox Code Playgroud)

然后在我们的config/auth.php我们需要修改api数组并将驱动程序更改为passport

'api' => [

    //for API authentication with Passport

    'driver' => 'passport',

    'provider' => 'users',

],
Run Code Online (Sandbox Code Playgroud)

然后app/Http/Kernel.php我们需要$middlewareGroups在 key 中的数组中添加一个中间件 web

protected $middlewareGroups = [

    'web' => [

        ................

        //for API authentication with Passport

        \Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,

    ],
Run Code Online (Sandbox Code Playgroud)

现在我们可以auth:api在我们的 api 路由上使用中间件。

Route::middleware('auth:api')->group( function(){
    ...your routes here
});
Run Code Online (Sandbox Code Playgroud)