laravel5.4的api路由必须要给user表添加api_token字段?

有大半年没用laravel了,最近用laravel5.4构建了新项目,发现路由里多了api.php这个文件。
默认的代码是

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

不知道auth:api是个什么东西,去看了一下。
才知道是配置了config/auth.php中的guardsapi项。而且这一项的默认配置的drivertoken
我想既然是默认配置,那肯定能用吧。
结果发现并不能。
网上找了好多资料才搞清楚逻辑,这种配置最终会在{project}/vendor/laravel/framework/src/Illuminate/Auth/TokenGuard.php 里执行,而实现的逻辑是通过api_token参数去user表找对应的数据,如果没有,就会报错。
然后默认的数据表里并没有api_token这个字段。
既然是默认配置,应该拿来就可以上手才对。搞不懂为什么Laravel默认用token这种driver,却没有把user表结构给添加上api_token这个字段?难道还有别的实现方式?或者是我搞错了?

没用过laravel,但感觉你理解错了,这个token应该是保存身份验证、状态的,不是存在表里的。我猜的。。说的不对别喷我。

http://www.tuicool.com/articlhttp://blog.csdn.net/han_cui/

api_token是一个加密字符串,在laravel中是可以设置这个api_token的时效的,不在user表中添加这个字段是因为这个字段是根据一定的条件动态加密出来的而不是固定不变的,这是一种安全机制

auth:api必须要有api_token字段。没错。
不想的就自己扩展一个guard extension 出来

api_token并不是和数据库中字段对应的,如果你想使用的话,可以在页面的header头中传值过来

如果不想使用系统自带的验证方法,也可以自定义验证方式。然后自己写中间件验证操作

我是搜到这个问题的. 我想说一下, 因为我查了好几天.
csrf_token 跟 api_token 似乎不是一回事.
{{csrf_field()}}是在blade里面搞的.
题主说到的,我目前看到的是对的.
默认从request里拿到是’api_token’字段的值.
然后默认用一个EloquentUserProvider里面retrieveByCredentials构建一个查询.
就是查的这个string.
eloquent不去表里查还能去哪里查.
所以user表里面还就是得有一个api_token的字段.除非把guard里面的默认值改了.(那也得填个别的字段)

只有 @cevin 说的没错,但是也不清楚.

关于是不是默认配置,我理解是拿来就用的是web路由,你一个make:auth 什么都搞定了.
而且web guard是session的driver. 它的userprovider什么的都另外一套.
而api呢,你本来就是给别人的别的或者自己的别的应用用的,加一个就加一个.
规则得自己定么.而且只是简单的认证一下.
不是还有那么多工具来搞api认证.

  • 求个时间复杂度极小的算法
  • laravel5 为什么把模型直接放在App目录下?
  • PHP框架打的日志一般如何统计整理与分类查看?
  • PHP开发微信无法获取到signature,timestamp,nonce
  • 如何提高关键字匹配的性能
  • PHP 的 curl 操作,属于跨域么?
  • 想用php 下载sftp里的csv文件,代码有什么不对吗?
  • wampserver 无法加载 php 扩展 fileinfo
  • phpstorm 如何支持html中的php代码,现在一直报错?
  • php namespace 引起的问题
  • 请问三元运算式3<8?(9<6?7:5):2>0?4:1在java和php中的值不一样,求解为何?