野狗 API 应用的一个问题?!也许不算是,希望大神指教!叩谢~

先报版本吧。
1、
/**
* The Laravel framework version.
*
* @var string
*/
const VERSION = '5.6.8';·
2、
"dingo/api": "2.0.0-alpha1"
其他的也是按伟大的社区API教程里面部署的。

需求:接口不强制Authorization, 但是判断是否有此参数,来对数据进行操作。也就是,判断是否登陆,登陆有一套流程,不登陆也可以,走另一套流程;

实现:直接api的时候没有加中间件,给的是游客路由:
$api->get('trends', 'TrendController@index');
没有中间件。
这样保证没登陆不会报错。

那么问题来了:
在Controller 方法里,调用
$this->auth()->check(true)
判断是否登陆,BUT~ 报错了:
"message": "Type error: Argument 1 passed to Symfony\\Component\\HttpKernel\\Exception\\UnauthorizedHttpException::__construct() must be of the type string, null given, called in /home/vagrant/Code/dm-api-dingo/vendor/dingo/api/src/Auth/Auth.php on line 113",
……
就是这样的错,我去查看了下源文件,发现在
dingo/api/Auth/Auth.php
有这么一个方法:
protected function throwUnauthorizedException(array $exceptionStack)
{
$exception = array_shift($exceptionStack);

if ($exception === null) {
$exception = new UnauthorizedHttpException(null, 'Failed to authenticate because of bad credentials or an invalid authorization header.');
}

throw $exception;
}

方法 new 了 Symfony\Component\HttpKernel\Exception\UnauthorizedHttpException这个类,并传入了null的参数。

我不知道这个意味着什么,但是我去看这个类的构建函数发现:
public function __construct(string $challenge, string $message = null, \Exception $previous = null, ?int $code = 0, array $headers = array())
{
$headers['WWW-Authenticate'] = $challenge;

parent::__construct(401, $message, $previous, $headers, $code);
}

人家写了要sting嘛,我如果强制把null 换成 '' 就一切正常了……

所以,求教下,这个是dingo的BUG么?
还是我哪里没看到?
还是升级了我没看到,我看了github 上的 dingo/api版本 跟现在是一样的啊~
是该咋搞呢?除了重写,还有别的方法么?
或者有什么别的方法实现俺的需求呢?

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3

好了,我想到去看了一下源代码,24天前有新的更新
$exception = new UnauthorizedHttpException('dingo',
这个问题已经解决了,我估计我更新一下dingo就好了

7年前 评论
Summer

问题放到问答分类里

7年前 评论

@reshared 是要升级到 2.0.0-alpha2 才行吗

6年前 评论

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