2016-09-18 207 views
3

当用户在浏览器中输入用户名和密码,登录成功。Laravel 5.3 API

我喜欢做一些API请求用户登陆之后。

Laravel 5.3提供路线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令牌不需要。

+0

嗨,你还需要帮助吗?我面临同样的问题,但认为我在api.php中的路由需要使用'auth:api'中间件方面取得了一些进展。 –

回答

5

如果您在api.php中指定路由,您需要使用auth:api中间件。因此,使用你的例子那就是:

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

注意有关令牌身份验证和Laravel 5.3:

  • 如果你已经安装laravel的默认身份验证系统,您还需要添加一个列api_token给用户表。如果您使用的是DB播种器,您可能需要添加如下内容: $table->char('api_token', 60)->nullable(); 您的用户表播种器。或者只需手动添加列,然后用随机的60个字符的键填充该列。
  • 提出请求时,可以将api_token作为URL/Querystring参数添加,如下所示: 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

+0

谢谢。一些评论:'$ table-> char('api_token',60) - > nullable();'进行迁移,而不是播种器。另一方面,我必须自己创建该令牌,因为向表单注册新用户并不能满足我的需求。其他的东西:通过URL传递api_token对我来说不起作用(在Laravel 5.4中)。但它使用Postman作为标题参数。 – mayid

1

这里说laravel passport installation

同时消耗自己的API添加下面一行在你的配置/ 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

你被重定向到home的原因是因为auth中间件定期检测用户的会话存储在您的浏览器,但由于api中间件不使用会话(见附录\ HTTP \ kernel.php),您的要求被认为是unauthenticated

如果你想执行利用会话简单的API,随意添加他们在你web路线,并确保由内而外将它们分组,以确保他们一个auth中间件。