Php 拉维5.3 API
当用户在浏览器上输入用户名和密码并成功登录时 我喜欢在用户登录后发出一些API请求 Laravel 5.3在routes文件夹中提供api.php 在api.php中,我包括: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' =>
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的默认身份验证系统,那么还需要在用户表中添加一列用于
。如果您使用的是DB seeders,则可能需要添加以下内容:api\u令牌
$table->char('api_token',60)->nullable()代码> 给你的用户一台播种机。或者,只需手动添加该列,并使用随机的60字符键填充该列李>
- 发出请求时,您可以将
添加为URL/Querystring参数,如下所示:api_令牌
。 您还可以将密钥作为标头发送(如果使用或类似),即: 标题: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参数。