Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 拉维5.3 API_Php_Laravel_Laravel 5.3 - Fatal编程技术网

Php 拉维5.3 API

Php 拉维5.3 API,php,laravel,laravel-5.3,Php,Laravel,Laravel 5.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' =>

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

我喜欢在用户登录后发出一些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令牌。

如果要在API.php中指定路由,则需要使用auth:API中间件。因此,以您的示例为例:

Route::group(['middleware' => ['auth:api']], function () {
    Route::get('/test', function (Request $request) {
         return response()->json(['name' => 'test']);
    });
});
关于Token auth和Laravel 5.3的注释:

  • 如果您已经设置了laravel的默认身份验证系统,那么还需要在用户表中添加一列用于
    api\u令牌
    。如果您使用的是DB seeders,则可能需要添加以下内容:
    $table->char('api_token',60)->nullable()
    给你的用户一台播种机。或者,只需手动添加该列,并使用随机的60字符键填充该列
    
  • 发出请求时,您可以将
    api_令牌
    添加为URL/Querystring参数,如下所示:
    domain.com/api/test?api_令牌=[您的60字符密钥]
    。 您还可以将密钥作为标头发送(如果使用或类似),即: 标题:
    授权
    ,值:
    承载者[您的60字符密钥]
  • 如果令牌不正确,我希望得到一个有用的错误,不仅要重定向到登录,还要发送包含所有请求的以下标头: 标题:
    Accept
    ,值:
    application/json
    。这允许
    App/Exceptions/Handler.php
    中的
    unauthenticated()
    函数中的
    expectsJson()
    检查正常工作

我发现很难从Laravel找到关于在5.3中使用token auth的清晰文档,我认为这是因为有一个驱动器可以使用,并且它以不同的方式支持token。下面这篇文章可能是最有助于它工作的:

首先安装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',
],

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


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

Laravel 5.5中的标准行为是将身份验证异常的处理委托给app/Handler::unauthenticated(),在项目的应用程序代码中。您将在其中找到重定向到登录页面的代码,您可以覆盖它或在其中执行进一步的测试和上下文化。在以前的Laravel版本(我相信其中有5.3版)中,此异常处理是在供应商文件夹中的Laravel库中执行的

嗨,你还需要帮忙吗?我也面临着同样的问题,但我认为我已经在api.php中的路由使用“auth:api”中间件的方式上取得了一些进展。谢谢。几个注释:
$table->char('api_-token',60)->nullable()用于迁移,而不是播种机。另一方面,我必须自己创建这个令牌,因为向表单注册新用户并不能满足我的需要。另外:通过URL传递api_令牌对我来说不起作用(在Laravel5.4中)。但它确实可以使用Postman作为header参数。