最近使用的oneindex出现白屏了,总是一段时间会出现,之前搜索过解决方案,没有找到一个说明问题原因的答案,于是自己动手试试。如果你不需要了解这个过程直接看后面修改方法。
思路
oneindex出现白屏后,我尝试在postman上使用base.php里面的refreshtoken重新获取accesstoken,提示refreshtoken是2月多创建的,refreshtoken过期了,算一下refreshtoken是有限期大概是三个月。这时我就重新捋了一下oneindex的授权过程:
1)在https://aad.portal.azure.com创建一个应用程序,获得一组应用程序ID/密钥SK,设置回调地址,配置权限(一般好像给委托权限【需要账号登录】,给文件读写、离线、用户资料权限),安装时使用。
2)安装时账号登录授权获取一个code →→用到 微软oauth接口+应用程序ID+权限+回调地址
3)程序使用 code, 获取 refreshtoken,这个refreshtoken保存在config/base.php里面 →→用到 微软oauth接口+应用程序ID+SK+ 回调地址 + code
4)程序使用 refreshtoken, 获取 accesstoken和一个新的refreshtoken,这个accesstoken和新的refreshtoken保存在config/token.php里面 →→用到 微软oauth接口+应用程序ID+SK + 回调地址 + refreshtoken
5)程序使用 accesstoken获取文件 →→用到微软graph接口+ accesstoken
6)刷新文件,程序检测config/token.php里面过期时间,小于600就刷新token,重复第四步的过程(使用base.php里面的refreshtoken)
问题就出现在这个过期的refreshtoken上,之前一直听说refreshtoken长期有效,用获取新的accesstoken,却没注意refreshtoken获取accesstoken的过程也是会生成新的refreshtoken,而oneindex并没有把新的refreshtoken写到base.php用于下次刷新,一直使用第一次授权时的refreshtoken。这就好办,把刷新后的refreshtoken写进base.php应该就可以解决了。
解决
修改lib/onedrive.php,查找 config(‘@token’, $token);
在下面加一行 config(‘refresh_token’, $token[‘refresh_token’]);
评论(0)