Laravel 5.3 API

3

当用户在浏览器中输入用户名和密码并成功登录时。

我想在用户登录后进行一些API请求。

Laravel 5.3在routes文件夹中提供了api.php。

在api.php中,我已经包含了:

Route::group(['middleware' => ['auth']], function () {
    Route::get('/test', function (Request $request) {
         return response()->json(['name' => 'test']);
    });
});

当在浏览器上请求 domain.com/api/test 时,由于某种原因它被重定向到了 /home
不需要 API token。

你好,你还需要帮助吗?我也遇到了同样的问题,但是我认为在api.php中使用'auth:api'中间件的路由方式方面已经取得了一些进展。 - Mere Development
4个回答

6

如果您在api.php中指定路由,您需要使用auth:api中间件。因此,使用您的示例,它将是:

Route::group(['middleware' => ['auth:api']], function () {
    Route::get('/test', function (Request $request) {
         return response()->json(['name' => 'test']);
    });
});

关于Token认证和Laravel 5.3的注意事项:

  • 如果您已经设置了Laravel默认的身份验证系统,则还需要向用户表添加一个api_token列。如果您正在使用DB种子,您可能需要添加以下内容:$table->char('api_token', 60)->nullable();到您的用户表seeder中。或者手动添加该列并使用随机的60个字符填充该列。
  • 在进行请求时,可以将api_token作为URL /查询字符串参数添加,如下所示:domain.com/api/test?api_token=[your 60 char key]。您也可以将密钥作为标头发送(如果使用Postman或类似工具),即:标头:Authorization,值:Bearer [your 60 char key]
  • 为了在令牌不正确时获得有用的错误信息,而不仅仅是重定向到登录页面,请在所有请求中还发送以下标头:标头:Accept,值:application/json。这使得App/Exceptions/Handler.php中的unauthenticated()函数内的expectsJson()检查能够正常工作。

我发现很难从Laravel中找到关于使用5.3进行令牌认证的清晰文档,我认为这是因为存在使用Passport的趋势,并且它以不同的方式支持令牌。以下文章可能对使其正常工作最有帮助:https://gistlog.co/JacobBennett/090369fbab0b31130b51


谢谢。有几个评论:$table->char('api_token', 60)->nullable();应该放在迁移中,而不是种子文件中。另一方面,我必须自己创建那个令牌,因为使用表单注册新用户时不会自动填充。还有一点:通过URL传递api_token对我来说行不通(在Laravel 5.4中)。但是在Postman中作为头部参数可以正常工作。 - mayid

1

首先按照此处所述Laravel Passport安装安装护照。

在使用自己的API时,在配置文件config/app.php的中间件部分添加以下行:

'web' => [
// Other middleware...
\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class,
],

现在请将您的路线更改为:
Route::group(['middleware' => ['auth:api']], function () {
Route::get('/test', function (Request $request) {
     return response()->json(['name' => 'test']);
});
});

现在,在您的config/auth.php文件中更改以下行:
 'api' => [
    'driver' => 'passport',
    'provider' => 'users',
],

0
在Laravel 5.5中,标准行为是委托处理身份验证异常到app / Handler :: unauthenticated(),在您的项目应用程序代码中。您会发现代码在那里重定向到登录页面,并且您可以覆盖它或在其中执行进一步的测试和上下文化。在先前的Laravel版本中,包括5.3在内,此异常处理是在vendor文件夹内部深度执行的。

0

你被重定向回到首页的原因是由于auth中间件检查了用户会话是否存储在您的浏览器中,但由于api中间件不使用会话(请参阅app\http\kernel.php),因此您的请求被视为未经身份验证

如果您想执行利用会话的简单API,请随意将它们添加到您的web路由中,并确保通过将它们分组到auth中间件中来保护它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接