Hello,
We've recently upgraded to the Invision v2.7.0 and changed our PHP version to 8.1 which is supported now. After this change we see some errors coming from the profilesync maintenance task not being able to run due to errors. Our logs go back one week and this error started after the upgrade, prior it was not causing issues.
The errors are:
TypeError: array_key_exists(): Argument #2 ($array) must be of type array, null given (0)
#0 /var/www/html/public/system/Login/Handler/OAuth2/Custom.php(472): array_key_exists()
#1 /var/www/html/public/system/Login/Handler/OAuth2/Custom.php(438): IPS\Login\Handler\OAuth2\_Custom::getValueFromArray()
#2 /var/www/html/public/system/Login/Handler/OAuth2/Custom.php(310): IPS\Login\Handler\OAuth2\_Custom->_userData()
#3 /var/www/html/public/system/Login/Handler/OAuth2/Custom.php(378): IPS\Login\Handler\OAuth2\_Custom->authenticatedUserName()
#4 /var/www/html/public/system/Member/Member.php(4951): IPS\Login\Handler\OAuth2\_Custom->userProfileName()
#5 /var/www/html/public/applications/core/tasks/profilesync.php(78): IPS\_Member->profileSync()
#6 /var/www/html/public/system/Task/Task.php(367): IPS\core\tasks\_profilesync->IPS\core\tasks\{closure}()
#7 /var/www/html/public/applications/core/tasks/profilesync.php(66): IPS\_Task->runUntilTimeout()
#8 /var/www/html/public/system/Task/Task.php(266): IPS\core\tasks\_profilesync->execute()
#9 /var/www/html/public/applications/core/modules/admin/settings/advanced.php(754): IPS\_Task->run()
#10 /var/www/html/public/system/Dispatcher/Controller.php(107): IPS\core\modules\admin\settings\_advanced->runTask()
#11 /var/www/html/public/applications/core/modules/admin/settings/advanced.php(38): IPS\Dispatcher\_Controller->execute()
#12 /var/www/html/public/system/Dispatcher/Dispatcher.php(153): IPS\core\modules\admin\settings\_advanced->execute()
#13 /var/www/html/public/admin/index.php(13): IPS\_Dispatcher->run()
#14 {main}
I've looked through the code, and tried to call our custom OAuth2 provider with Postman and with an access token, and it returns the data in an array as expected. My hypothesis is that something is broken or a check is missing perhaps for users with expired access tokens? Perhaps PHP 8 changed some argument requirements in some of the functions?