API 验证 laravel 5.7

Posted

技术标签:

【中文标题】API 验证 laravel 5.7【英文标题】:API validation laravel 5.7 【发布时间】:2019-05-16 07:15:34 【问题描述】:

我需要用 laravel 5.7 做一个 api,这个 api 本身不是问题。

我需要对当前模型和嵌套关系对象进行严格验证以保存,例如。

想象一个具有关系 cmets 的模型帖子。 我已将我的数据存储在数据库中:

[ id: 1, user_id: 1, title: 'my title post', comments: [id: 5, comment: 'my comment for post id 1'], id: 2, user_id: 1, title: 'my second title post', comments: [id: 15, comment: 'my comment for post id 2'], id: 8, user_id: 2, title: 'my third title post', comments: [id: 25, comment: 'my comment for post id 8'] ]

我登录api的user_id是1 如果我尝试发送POST http 来更新帖子和评论,我如何验证登录api 的用户是每个对象的所有者?帖子示例:

POST 更新。



    [
      id: 1, user_id: 1, title: 'my title post modified', comments: [id: 5, comment: 'my comment for post id 1'],
      id: 1, user_id: 1, title: 'my title post modified 2', comments: [id: 25, comment: 'my comment for post id 1'],
      `id: 8`, user_id: 2, title: 'my title post', comments: [`id: 25`, comment: 'my comment for post id 1'],
    ]

示例如何显示,我只能修改数组的第一个和第二个对象,但不能修改第二个对象中的注释。

希望我正确地表达了自己。

【问题讨论】:

您在 Posts 表中没有一列来保存写入吗?喜欢 author_id? @FatemehMajd 它的user_id 在帖子表中 【参考方案1】:

首先确保您以JSON 格式获取您的帖子数据,并用双引号" 围绕键和字符串。并在 Laravel - php 中创建 JSON 数据:

$postsData = '[
  "id": 1, "user_id": 1, "title": "my title post", "comments": ["id": 5, "comment": "my comment for post id 1"],
  "id": 2, "user_id": 1, "title": "my second title post", "comments": ["id": 15, "comment": "my comment for post id 2"],
  "id": 8, "user_id": 2, "title": "my third title post", "comments": ["id": 25, "comment": "my comment for post id 8"]
]';

$posts = json_decode($postsData);

//var_dump($posts);

$authUserId = 1;

foreach($posts as $post) 
  if($authUserId == $post->user_id) 
      echo 'User own this Post...<br/>';
      echo $post->id.' - '.$post->title;
      foreach($post->comments as $comment) 
              echo '<br/>';
              echo '----'.$comment->id.' - '.$comment->comment;
              echo '<br/>';
      
      echo '<br/>';
  

输出将是用户 1 只能保存帖子 1 和 2:

User own this Post...
1 - my title post
----5 - my comment for post id 1

User own this Post...
2 - my second title post
----15 - my comment for post id 2

【讨论】:

这不是一个坏主意,但我认为它可以通过一些中间件或每个模型的请求来执行?或者其他使用框架实用程序的东西,laravel 是一个强大的框架,我认为以前有人做过类似的这个。 如果你认为它可能有一些 laravel 包。在我检查之后,我找到了一个 8 星的laravel-nestedupdater - Github,所以不是很受欢迎,但声称可以完成这项工作。可能还有其他的,但我认为 Laravel 还没有内置的。如果他们做到了,那就太棒了。但是,您越能让您的代码远离 3rd-Party 软件包,当您需要升级您的代码时,它就越适合您。

以上是关于API 验证 laravel 5.7的主要内容,如果未能解决你的问题,请参考以下文章

使用 REST API 的 Laravel 电子邮件验证 5.7

如何修复“文件上传失败。”使用任何图像上传验证时出错 - Laravel 5.7

Laravel 5.7 + Spatie 权限 + JWT 身份验证

未找到 Laravel 5.7 电子邮件验证类“DOMDocument”

Laravel 5.7 API 与 CORS 问题

Laravel 5.7 - 覆盖请求验证类中的 all() 方法以验证路由参数?