我创建了自己的身份验证中间件,该身份验证中间件接受用于查询api_tokens
表的查找标头,以查找匹配的标记并检查到期日期。身份验证在RESTful测试中失败
当手动测试但是自动化测试正在做一些奇怪的事情时,这样工作正常。我的测试基本上是这样的:
public function testGetLocation()
{
$user = factory(\App\Models\User::class, 'userA')->create();
$token = factory(\App\Models\ApiToken::class, 'userA-token')-create();
$location = factory(\App\Models\Location::class, 'userA-location1')->create();
$this->json('GET', '/api/location/'.$location->id, [], ['Authorization' => 'Bearer '. $token->token])
->assertStatus(200);
}
然而,当我运行测试,我收到一个500错误,指出列users.api_token
不存在。我已经从用户表中删除了这一列,因为它不再需要。如果我放回来,我不会收到错误,但测试用户无法进行身份验证。显然Laravel或phpunit在某种程度上忽略了我尝试使用的身份验证。我看不到在哪里。
在Google上搜索后,我尝试了其他人提到的其他方法,例如添加了actingAs($user)
和$this->be()
,但这并没有帮助。
有什么建议吗?
编辑:MySQL日志显示,正在执行这个查询:
select * from `users` where `api_token` = 'userA-token' limit 1
Laravel不应该被搜索的用户表中的api_token。这不是我的代码的结果,所以我迷路了。
编辑2:我routes/api.php
看起来是这样的:
Route::group([
'prefix' => 'api',
//'middleware' => 'auth:api'
'middleware' => 'ApiTokenAuthentication',
], function() {
这绝对是被调用,因为我可以输出在测试过程中瓦尔在这里。但它似乎也被称为标准身份验证,尽管它不包含在路由的任何地方。
你试过'AUTH() - >登录($用户)'全局函数? –
我现在有但没有变化。谢谢您的好意。 – Dubby