是否可以仅使用一个 API 键来允许访问 Laravel API?

Is it possible to allow access to Laravel API only with one API key?

我是 Laravel API 世界的新手。我想制作一个简单的 Laravel 应用程序,而不是 returns 一些 json 格式的东西。不过,我不希望使用 url link 的任何人都可以访问它。我只想允许通过一个 API 键访问。可能吗?或者每个用户都必须有一个唯一的密钥?以及如何做到?

有可能。

您必须在用户 table 中有 api_token 字段,并且还要在您的 api 路由中添加中间件。 api.php

Schema::table('users', function ($table) {
    $table->string('api_token', 80)->after('password')
                        ->unique()
                        ->nullable()
                        ->default(null);
});

api 路由中的中间件(api.php):

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

您也可以为您的 api 定义自定义 api 守卫,例如,如果您有两个 table 医生和病人,您将有两个 tables 并且对于这两个用户,您将需要唯一的 api_token,您可以在 config/auth.php

中定义这些自定义 api 守卫

看这里:https://laravel.com/docs/5.8/api-authentication

是的,这绝对有可能。我们不知道您的应用程序要求,但是如果您只想 return 一些东西,因此您不需要确定哪个用户做了什么,没有理由像另一个建议的答案那样使用每个用户的密钥。

例如,您可以将密钥放在 .env

API_KEY=yourkey

然后,只需将中间件添加到 api 路由,它将首先检查请求中是否传递了正确的 ApiKey。

您可以将您的 env 变量传递给任何配置文件,然后在您的应用中的任何位置调用 config('yourConfigFile.apiKey')

对于一些简单的场景,这种方法已经 100% 足够了。考虑谁将有权访问此密钥以及它将如何传递。如果只有一个全局密钥,并且您的 api 消费者将简单地使用 ajax 而无需通过服务器代理,那么您的 api 密钥将被公开,每个人都可以获取并使用它它在任何地方。

如果是这种情况,您仍然可以避免为每个用户创建密钥 - 只需指定可以调用您的 API 的允许域列表,然后检查密钥。这一切都可以在中间件中检查。

就像我说的,了解您的 requirements/use 个案例,然后做出决定:-)