有大半年没用laravel了,最近用laravel5.4构建了新项目,发现路由里多了api.php这个文件。
默认的代码是
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
不知道auth:api是个什么东西,去看了一下。
才知道是配置了config/auth.php中的guards的api项。而且这一项的默认配置的driver是token。
我想既然是默认配置,那肯定能用吧。
结果发现并不能。
网上找了好多资料才搞清楚逻辑,这种配置最终会在{project}/vendor/laravel/framework/src/Illuminate/Auth/TokenGuard.php 里执行,而实现的逻辑是通过api_token参数去user表找对应的数据,如果没有,就会报错。
然后默认的数据表里并没有api_token这个字段。
既然是默认配置,应该拿来就可以上手才对。搞不懂为什么Laravel默认用token这种driver,却没有把user表结构给添加上api_token这个字段?难道还有别的实现方式?或者是我搞错了?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
没用过laravel,但感觉你理解错了,这个token应该是保存身份验证、状态的,不是存在表里的。我猜的。。说的不对别喷我。
http://www.tuicool.com/articl... http://blog.csdn.net/han_cui/...
api_token是一个加密字符串,在laravel中是可以设置这个api_token的时效的,不在user表中添加这个字段是因为这个字段是根据一定的条件动态加密出来的而不是固定不变的,这是一种安全机制
用
auth:api必须要有api_token字段。没错。不想的就自己扩展一个guard extension 出来
api_token并不是和数据库中字段对应的,如果你想使用的话,可以在页面的header头中传值
过来
如果不想使用系统自带的验证方法,也可以自定义验证方式。然后自己写中间件验证操作