【问题标题】:Laravel API Project - Design and AuthenticationLaravel API 项目 - 设计和认证
【发布时间】:2017-06-16 09:29:13
【问题描述】:

我的任务是为客户构建外部 API。在不泄露任何业务数据的情况下,数据库由我们的整个工作流程组成。生成的事件、相关的票证和其他信息,都可以由客户区分。

我想用非常简单的端点构建一个 api。对于每个表,例如门票,我希望有两个端点:

/tickets            #will return a list of tickets and general information
/ticket/<ticket_id> #More detailed information about the specific ticket

对于任何进行身份验证的客户,这些路由将仅返回与其关联的那些数据库记录。

我之前没有在 Laravel 中写过这样的系统。我是否正确理解护照是要走的路?我想我在问是否有更简单的方法可以安全地进行这种类型的身份验证(Passport 是否矫枉过正)?如果我们有一小部分客户,并且可以为他们设置身份验证,那么证书会是更好的选择吗?或者 OAuth2 是现在这样的行业标准,以至于不使用 Passport 是一个错误?

如果 Passport 是最好的,那么 OAuth2 服务器和应用程序服务器是分开的站点更好,还是可以将它们合并到一个应用程序中?

感谢您的任何建议。

【问题讨论】:

  • 我喜欢这个问题,但你问的问题不止一个,而且有很多开放区域要覆盖。可能会被标记为广泛。 +1 在前面

标签: laravel api laravel-5


【解决方案1】:

虽然建议使用护照,但您仍然可以通过为您的用户提供api_token 属性来使用简单的 API 身份验证。如果您在请求标头中设置该令牌,Laravel 将自动对用户进行身份验证。尽管您必须使用 auth:api 中间件。

如果你使用auth:api中间件,你可以在你的控制器中做$user = Auth::guard('api')-&gt;user();,它会自动返回发送请求的用户。

这篇文章很好地解释了该怎么做:https://gistlog.co/JacobBennett/090369fbab0b31130b51。它给出了以下步骤:

  1. api_token作为字符串添加到用户迁移中
  2. routes/api.php中的中间件定义分组路由

    Route::group(['middleware' => 'auth:api', 'prefix' => 'v1'], function() { Route::resource('tickets', 'TicketController'); });

你可以走了。

只要您在控制器中定义public function index()public function show()Route::resource() 就可以同时处理/tickets/tickets/123

API 调用的 URL 看起来像 http://website.com/api/v1,因为我在组前面加上了 v1

【讨论】:

  • 太棒了,感谢您提供此信息!很好奇,正如您在推荐使用护照这一事实前言的那样,您是否可以使用一两个应用程序来解决 Passport 问题?可以将护照捆绑到应用程序中还是将它们分开更好?
  • 我没有 100% 理解您的问题,但我认为这与您在帖子中的最后一个问题有关。是的,您可以在一个应用程序中组合所有功能。这就是我为小型项目所做的。但是对于有很多团队成员的大型项目,我们通常将后端(Laravel)与前端(AngularJS、ReactJS)分开。在所有情况下,我们仍然可以使用passportapi_token
猜你喜欢
  • 1970-01-01
  • 2018-12-19
  • 2013-05-29
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2020-09-14
相关资源
最近更新 更多