Closed cruelwolfking closed 4 years ago
Trying to access array offset on value of type null,报错是这个
我又改成sso了,明早观察一下是不是又会导致服务崩溃
测出来了,开sso真的会导致服务崩溃。。。 现在所有接口全部都访问超时了,取消sso,就不会大佬能看是啥问题吗
。。。好像重新登陆就可以了,但是很奇怪。为啥不会报登陆过期呢,全部直接访问超时
sso 登陆成功之后很快就提示重新登陆了。这是为什么呢mop就不会,一样的配置
晚上回去我看看
---原始邮件--- 发件人: "cruelwolfking"<notifications@github.com> 发送时间: 2020年8月8日(周六) 下午4:50 收件人: "phper666/jwt-auth"<jwt-auth@noreply.github.com>; 抄送: "Subscribed"<subscribed@noreply.github.com>; 主题: Re: [phper666/jwt-auth] 在使用sso单点登陆的时候,php7.4会报notice, (#28)
sso 登陆成功之后很快就提示重新登陆了。这是为什么呢mop就不会,一样的配置
— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or unsubscribe.
大佬是什么问题呢,有点懵逼,从mmop切换到sso,登陆状态就没办法保持了,各种登陆过期
啊啊啊啊,要被老板弄死了。单点登录真的有问题,登陆了一会就失效,请求全部超时,用户炸了。。。。
@cruelwolfking 刚刚回到家,开单点登录会引起服务奔溃?notice也不会引起什么大问题的呀,能具体说说吗?
@cruelwolfking 请求超时?请求超时你看下nginx,有转发到php做处理吗?超时有好几种可能,而且不可能是登录失效就超时,有有日志吗?
@cruelwolfking 你开启了sso有做刷新token吗?sso失效实际可能token被放入了黑名单,或者你的失效时间过短导致,你可以看看缓存里面是否有数据
就是我用这个做了登陆中间间然后切换到sso以后,登陆成功,过一分钟这样就token失效了,然后回一直报登陆过期
`<?php
declare(strict_types=1);
return [
'login_type' => env('JWT_LOGIN_TYPE', 'mpop'),
# 单点登录自定义数据中必须存在uid的键值,这个key你可以自行定义,只要自定义数据中存在该键即可
'sso_key' => 'uid',
# 非对称加密使用字符串,请使用自己加密的字符串
'secret' => env('JWT_SECRET', 'cruelwolfking'),
/*
* JWT 权限keys
* 对称算法: HS256, HS384 & HS512 使用 `JWT_SECRET`.
* 非对称算法: RS256, RS384 & RS512 / ES256, ES384 & ES512 使用下面的公钥私钥.
*/
'keys' => [
# 公钥,例如:'file://path/to/public/key'
'public' => env('JWT_PUBLIC_KEY'),
# 私钥,例如:'file://path/to/private/key'
'private' => env('JWT_PRIVATE_KEY'),
],
# token过期时间,单位为秒
'ttl' => env('JWT_TTL', 86400),
# jwt的hearder加密算法
'alg' => env('JWT_ALG', 'HS256'),
# 是否开启黑名单,单点登录和多点登录的注销、刷新使原token失效,必须要开启黑名单,目前黑名单缓存只支持hyperf缓存驱动
'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true),
# 黑名单的宽限时间 单位为:秒,注意:如果使用单点登录,该宽限时间无效
'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 0),
# 黑名单缓存token时间,注意:该时间一定要设置比token过期时间要大,默认为1天
'blacklist_cache_ttl' => env('JWT_BLACKLIST_CACHE_TTL', 86400*2),
]; `
这个是我的配置截图,我只要把mmop改成sso,登陆就会各种有问题,登陆成功了,也会提示我重新登陆。
@cruelwolfking 我现在改为了单点登录,但是并没有出现你说的需要重新登录,你可以看看缓存,会有一个黑名单
@cruelwolfking 你单点登录有使用唯一key吗?我文档里面有说明的
我看下是不是唯一key重复了
@cruelwolfking 而且开sso不会一起服务崩溃,里面没有任何能引起服务奔溃的代码。。。。。
@cruelwolfking 不过我用的是php7.3.12,7.4没使用过,但是照理来说不会引起服务奔溃的
@cruelwolfking 使用单点登录,生成token的时候必须加一个唯一的id,可以用用户id来做唯一id,因为单点登录会根据这个id来拿值判断token是否失效
我看了是我代码不严谨,用的key存在重复
@cruelwolfking 好的,如果有问题,可以再联系我~
然后出现了一个很奇怪的事情,不过不知道是不是这个报错引起的hyperf异常,就是运行时间长了以后,hyperf会全部访问超时。暂时不清楚是不是这个报错引起的,hyperf2.0版本。暂且提一下