composer-phphybridauthhybridauthprovider

Hybridauth + composer: how to add custom providers


I'm converting a php project to use composer as dependency manager.

The dependencies are loaded via this line in my main script.

require 'vendor/autoload.php';

One of these dependencies is hybridauth (version 2.9). Since using Composer, it throws 'file not found' errors when looking for custom providers files.

For instance, my main controller calls Hybrid like this:

$config_file_path = dirname(__FILE__) .'/hybridauth/config.php';
$hybridauth = new Hybrid_Auth( $config_file_path );

Now, here is the config file. The provider i'm using is "Facebooktest". Note that I had to specify the path via the [wrapper][path]; array key to get to the next error message.

return
array(
    "base_url" => WWWROOT."/auth",
    "providers" => array(
        "Facebook" => array(
            "enabled" => true,
            "keys" => array("id" => "xxxxxxx", "secret" => "xxxxxxxx"),
            "scope" => "email",
            "trustForwarded" => false
        ),
        "Facebooktest" => array(
            "enabled" => true,
            "keys" => array("id" => "xxxxxxx", "secret" => "xxxxxx"),
            "scope" => "email",
            "trustForwarded" => false,
            "wrapper"=> array(
                "class"=>'Hybrid_Providers_Facebooktest',
                "path"=> './controllers/hybridauth/Hybrid/Providers/Facebooktest.php'
            )
        )
    ),
    "debug_mode" => false,
    "debug_file" => "",
);

The error message (with trace):

require_once(/path/to/composer-project/vendor/hybridauth/hybridauth/hybridauth/Hybrid/thirdparty/Facebook/autoload.php): failed to open stream: No such file or directory

[vendor/bcosca/fatfree/lib/base.php:2174] Base->error()
[controllers/hybridauth/Hybrid/Providers/Facebooktest.php:61] Base->{closure}()
[controllers/hybridauth/Hybrid/Providers/Facebooktest.php:61] require_once()
[vendor/hybridauth/hybridauth/hybridauth/Hybrid/Provider_Model.php:99] Hybrid_Providers_Facebooktest->initialize()
[vendor/hybridauth/hybridauth/hybridauth/Hybrid/Provider_Adapter.php:101] Hybrid_Provider_Model->__construct()
[vendor/hybridauth/hybridauth/hybridauth/Hybrid/Auth.php:278] Hybrid_Provider_Adapter->factory()
[vendor/hybridauth/hybridauth/hybridauth/Hybrid/Auth.php:230] Hybrid_Auth::setup()
[controllers/auth-action.get.php:19] Hybrid_Auth::authenticate()

I find it strange that I now need to modify paths inside the "vendor/hybridauth/" project. It defeats the purpose of using a dependency manager. Surely, I must be doing it wrong. Can you advise?


Solution

  • Check my answer to another question here If you have recently installed Hybridauth through composer you probably have downloaded v2.9.2, which contain a bug in their Facebook class that replace the vendor path from yours to hybridauth/vendor, causing such issue.

    I suspect you created that Facebooktest class by copying their Facebook class and therefore sustained that error. Either update to their dev branch and copy that Facebook class, or simply use other provider class as template for your custom provider class.