dingo/API 的 api.auth 中间件对于不同用户表认证问题

表示很想知道在config/api.php中配置完

'auth' => [
    'jwt' => 'Dingo\Api\Auth\Provider\JWT',
]

之后给路由添加dingo/apiapi.auth中间件,用户认证时默认采用的Guard为什么是config/auth.php中配置的api Guard,它们之间是从哪里联系的?

在做不同用户表认证时,api guard的Provider是users,这样就会只对前台用户(users)做认证,是否有办法使用api.auth中间件做用户认证时可以配置不同Guard呢?(例如我配置一个admin_api guard它的provideradmin_users,不同用户表的用户认证时进行切换Guard)

Google和百度之后,发现很多人的做法是自定义一个后台用户认证的中间件,在做后台用户认证的时候,在中间件中动态修改api guardprovider指向,达到不同用户表认证的目的,可是这种动态修改配置的做法不就失去了配置的意义吗?有没有更好的办法?

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
liyu001989
最佳答案

@Apodabird dingo 没有处理不同guard之间的切换,始终使用的是默认的 guard,等待新的 pr 吧

总结一下

  1. 始终使用 api.auth 中间件,像你的做法,提前切换一下默认的 guard;
  2. 使用 Laravel 的 auth 中间件,auth:api 和 auth:admin 切换很方便,但是要注意,controller中需要使用 auth('api')->user() 获取用户,不能使用 $this->user() 否则会多查询一次用户。

貌似有多用户的情况用自带的会更加方便一点

5年前 评论
讨论数量: 6
liyu001989

@Apodabird

最好的方式应该是 像默认的 auth 中间件一样,可以传参数,auth:api 或者 auth:admin。但是 dingo 的 api.auth 在验证之后会将用户记录下来,这样 controller 中才能使用 $this->user() 获取当前用户。

等我明天整理一下再回复你

5年前 评论

@liyu001989
感谢回复
目前的做法是这样的,我定义了一个DefineAPIGuardProvider中间件,传递不同参数去修改了配置中的api guard的provider指向(users or admin_users)

5年前 评论
liyu001989

@Apodabird dingo 没有处理不同guard之间的切换,始终使用的是默认的 guard,等待新的 pr 吧

总结一下

  1. 始终使用 api.auth 中间件,像你的做法,提前切换一下默认的 guard;
  2. 使用 Laravel 的 auth 中间件,auth:api 和 auth:admin 切换很方便,但是要注意,controller中需要使用 auth('api')->user() 获取用户,不能使用 $this->user() 否则会多查询一次用户。

貌似有多用户的情况用自带的会更加方便一点

5年前 评论

@arfurs 我也碰到这个问题,请问DefineAPIGuardProvider怎么实现的?
@liyu001989 老师 api.auth 这个中间件在哪里注册的,我怎么查看

5年前 评论
Cwift

@liyu001989 问下现在dingapi支持切换guard了吗

4年前 评论
liyu001989

@Cwift 貌似不能

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!