phper666 / jwt-auth

能直接在hyperf框架中使用jwt的组件. 用之前,请详细的看下下面的文档~
191 stars 35 forks source link

在使用sso单点登陆的时候,php7.4会报notice, #28

Closed cruelwolfking closed 4 years ago

cruelwolfking commented 4 years ago

然后出现了一个很奇怪的事情,不过不知道是不是这个报错引起的hyperf异常,就是运行时间长了以后,hyperf会全部访问超时。暂时不清楚是不是这个报错引起的,hyperf2.0版本。暂且提一下

cruelwolfking commented 4 years ago

Trying to access array offset on value of type null,报错是这个

cruelwolfking commented 4 years ago

我又改成sso了,明早观察一下是不是又会导致服务崩溃

cruelwolfking commented 4 years ago

测出来了,开sso真的会导致服务崩溃。。。 现在所有接口全部都访问超时了,取消sso,就不会大佬能看是啥问题吗

cruelwolfking commented 4 years ago

。。。好像重新登陆就可以了,但是很奇怪。为啥不会报登陆过期呢,全部直接访问超时

cruelwolfking commented 4 years ago

sso 登陆成功之后很快就提示重新登陆了。这是为什么呢mop就不会,一样的配置

phper666 commented 4 years ago

晚上回去我看看

---原始邮件--- 发件人: "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.

cruelwolfking commented 4 years ago

大佬是什么问题呢,有点懵逼,从mmop切换到sso,登陆状态就没办法保持了,各种登陆过期

cruelwolfking commented 4 years ago

啊啊啊啊,要被老板弄死了。单点登录真的有问题,登陆了一会就失效,请求全部超时,用户炸了。。。。

phper666 commented 4 years ago

@cruelwolfking 刚刚回到家,开单点登录会引起服务奔溃?notice也不会引起什么大问题的呀,能具体说说吗?

phper666 commented 4 years ago

@cruelwolfking 请求超时?请求超时你看下nginx,有转发到php做处理吗?超时有好几种可能,而且不可能是登录失效就超时,有有日志吗?

phper666 commented 4 years ago

@cruelwolfking 你开启了sso有做刷新token吗?sso失效实际可能token被放入了黑名单,或者你的失效时间过短导致,你可以看看缓存里面是否有数据

cruelwolfking commented 4 years ago

就是我用这个做了登陆中间间然后切换到sso以后,登陆成功,过一分钟这样就token失效了,然后回一直报登陆过期

cruelwolfking commented 4 years ago

`<?php

declare(strict_types=1);

return [

登录方式,sso为单点登录,mpop为多点登录

'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),

]; `

cruelwolfking commented 4 years ago

这个是我的配置截图,我只要把mmop改成sso,登陆就会各种有问题,登陆成功了,也会提示我重新登陆。

phper666 commented 4 years ago

@cruelwolfking 我现在改为了单点登录,但是并没有出现你说的需要重新登录,你可以看看缓存,会有一个黑名单 image

phper666 commented 4 years ago

@cruelwolfking 你单点登录有使用唯一key吗?我文档里面有说明的

cruelwolfking commented 4 years ago

我看下是不是唯一key重复了

phper666 commented 4 years ago

@cruelwolfking 而且开sso不会一起服务崩溃,里面没有任何能引起服务奔溃的代码。。。。。

phper666 commented 4 years ago

@cruelwolfking 不过我用的是php7.3.12,7.4没使用过,但是照理来说不会引起服务奔溃的

phper666 commented 4 years ago

@cruelwolfking 使用单点登录,生成token的时候必须加一个唯一的id,可以用用户id来做唯一id,因为单点登录会根据这个id来拿值判断token是否失效

cruelwolfking commented 4 years ago

我看了是我代码不严谨,用的key存在重复

phper666 commented 4 years ago

@cruelwolfking 好的,如果有问题,可以再联系我~