我是Laravel API世界的新手。我想制作一个简单的Laravel应用程序,而不是以json格式返回一些东西。我不希望具有url链接的任何人都可以访问它。我只允许通过一个API密钥进行访问。可能吗?还是每个用户都必须具有唯一的密钥?怎么办呢?
答案 0 :(得分:4)
是可能的。
您必须在users表中具有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防护,例如,如果您有两个称为Doctor和Patient的表,则将有两个表,并且对于两个用户,您将需要唯一的api_token,您可以定义这些自定义api防护在您的config / auth.php
中答案 1 :(得分:0)
是的,这是绝对可能的。我们不知道您对应用程序的要求,但是,如果您只希望返回一些东西,因此无需识别哪个用户做了什么,则没有理由为每个用户提供密钥作为另一个答案。
例如,您可以将密钥放入.env
API_KEY=yourkey
然后,只需将中间件添加到api路由,它将首先检查在请求内是否传递了正确的ApiKey。
您可以将env变量传递到任何配置文件,然后在应用程序中的任何位置调用config('yourConfigFile.apiKey')
。
对于某些简单情况,此方法已足够100%。考虑到谁将有权使用此密钥以及如何将其传递。如果只有一个全局密钥,并且您的api使用者将仅使用ajax而不通过服务器对其进行传播,那么您的api密钥将被公开,并且每个人都可以在任何地方使用它。
在这种情况下,您仍然可以避免为每个用户创建密钥-只需指定允许域的列表即可调用您的API,然后检查密钥。所有这些都可以在中间件中检查。
就像我说的,了解您的需求/用例,然后做出决定:-)