Closed lorezyra closed 9 years ago
How do you setup the dependency HybridAuth to work with this ZF2 module?
Do I need to manually declare an include/require statement? (Since the use Hybridauth\Hybridauth;
statement doesn't load the dependency for my server...)
I have the HybridAuth here: ROOT_PATH . "/vendor/hybridauth/hybridauth/Hybrid/Auth.php"
Is this where you would have stored the dependency?
That's the correct path.
Put the OrgHeiglHybridAuth-Folder to ROOT_PATH . "/vendor/org_heigl/hybridauth"
and setup your autoloader to load classes for the namespace OrgHeiglHybridAuth
from ROOT_PATH . "/vendor/org_heigl/hybridauth/src/OrgHeiglHybridAuth
.
You will also have to add the vendor-directory to your module_paths
in your application.config.php
so that the Module.php
can be loaded automatically. So you'll have to add an autoloader or a require
for the class OrgHeiglHybridAuth/Module
.
Don't forget to add the Module to your application.conf.php.
I'm not sure whether that's been all, but I hope so. Please report your status so I know whether it works or not.
May I ask why you can't use composer? It's so much easier :wink:
Just curious as to why you don't have a classmap file defined in the ROOT_PATH . "/vendor/OrgHeiglHybridAuth/Module.php"
file in the getAutoloaderConfig() method. For example:
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
'Hybridauth' => dirname(dirname(__DIR__)) . "/vendor/hybridauth/hybridauth/Hybrid"
)
)
);
}
Reference Article: http://samminds.com/2012/11/zf2-performance-quicktipp-2-classmap-autoloading/
Regarding composer, it's not allowed by our team leader.
seriously? Sorry to hear that.
Regarding the classmap: As composer handles the autoloading there has been no need to do that. But it seems I'll have to add it in the next days or so. :wink:
Thanks for pointing out! I'll also add a tutorial on how to use it without composer :wink:
Yeah, paranoid about security... On the miniscule chance that a man-in-the-middle attack could occur while an update is in progress...
Anyway... ZF2 also supports a composer-less installation. But the learning-curve increases as you have to figure out more...
That would be awesome! IF you give me a paypal address, I'll send you some beer money :beers: :moneybag: !
While cd'ed to the /var/www/vendor/hybridauth/hybridauth
directory, I ran the following ZF2 script to generate this classmap of the dependent HybridAuth library.
php -f /var/www/vendor/ZF2/bin/classmap_generator.php
:memo:
<?php
// Generated by ZF2's ./bin/classmap_generator.php
return array(
'Hybrid_Provider_Model_OAuth2' => __DIR__ . '/Hybrid/Provider_Model_OAuth2.php',
'Hybrid_Providers_AOL' => __DIR__ . '/Hybrid/Providers/AOL.php',
'Hybrid_Providers_LinkedIn' => __DIR__ . '/Hybrid/Providers/LinkedIn.php',
'Hybrid_Providers_Twitter' => __DIR__ . '/Hybrid/Providers/Twitter.php',
'Hybrid_Providers_Yahoo' => __DIR__ . '/Hybrid/Providers/Yahoo.php',
'Hybrid_Providers_Foursquare' => __DIR__ . '/Hybrid/Providers/Foursquare.php',
'Hybrid_Providers_Live' => __DIR__ . '/Hybrid/Providers/Live.php',
'Hybrid_Providers_Facebook' => __DIR__ . '/Hybrid/Providers/Facebook.php',
'Hybrid_Providers_OpenID' => __DIR__ . '/Hybrid/Providers/OpenID.php',
'Hybrid_Providers_Google' => __DIR__ . '/Hybrid/Providers/Google.php',
'Hybrid_User' => __DIR__ . '/Hybrid/User.php',
'Hybrid_Provider_Model_OAuth1' => __DIR__ . '/Hybrid/Provider_Model_OAuth1.php',
'Hybrid_Provider_Model' => __DIR__ . '/Hybrid/Provider_Model.php',
'Hybrid_Logger' => __DIR__ . '/Hybrid/Logger.php',
'LightOpenID' => __DIR__ . '/Hybrid/thirdparty/OpenID/LightOpenID.php',
'LinkedInException' => __DIR__ . '/Hybrid/thirdparty/LinkedIn/LinkedIn.php',
'LinkedIn' => __DIR__ . '/Hybrid/thirdparty/LinkedIn/LinkedIn.php',
'FacebookApiException' => __DIR__ . '/Hybrid/thirdparty/Facebook/base_facebook.php',
'BaseFacebook' => __DIR__ . '/Hybrid/thirdparty/Facebook/base_facebook.php',
'Facebook' => __DIR__ . '/Hybrid/thirdparty/Facebook/facebook.php',
'OAuthException' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth.php',
'OAuthConsumer' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth.php',
'OAuthToken' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth.php',
'OAuthSignatureMethod' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth.php',
'OAuthSignatureMethod_HMAC_SHA1' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth.php',
'OAuthSignatureMethod_PLAINTEXT' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth.php',
'OAuthSignatureMethod_RSA_SHA1' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth.php',
'OAuthRequest' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth.php',
'OAuthServer' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth.php',
'OAuthDataStore' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth.php',
'OAuthUtil' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth.php',
'OAuth1Client' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth1Client.php',
'OAuth2Client' => __DIR__ . '/Hybrid/thirdparty/OAuth/OAuth2Client.php',
'Hybrid_Endpoint' => __DIR__ . '/Hybrid/Endpoint.php',
'Hybrid_User_Activity' => __DIR__ . '/Hybrid/User_Activity.php',
'Hybrid_Provider_Model_OpenID' => __DIR__ . '/Hybrid/Provider_Model_OpenID.php',
'Hybrid_Auth' => __DIR__ . '/Hybrid/Auth.php',
'Hybrid_Storage' => __DIR__ . '/Hybrid/Storage.php',
'Hybrid_Error' => __DIR__ . '/Hybrid/Error.php',
'Hybrid_Storage_Interface' => __DIR__ . '/Hybrid/StorageInterface.php',
'Hybrid_User_Contact' => __DIR__ . '/Hybrid/User_Contact.php',
'Hybrid_Exception' => __DIR__ . '/Hybrid/Exception.php',
'Hybrid_User_Profile' => __DIR__ . '/Hybrid/User_Profile.php',
'Hybrid_Provider_Adapter' => __DIR__ . '/Hybrid/Provider_Adapter.php',
);
?>
At this point, I have your module loading, but the dependency is not getting loaded via AutoLoad... Based on my limited knowledge of ZF2, I should create a classmap and define it in the config for this module.
Will let you know my progress.
Hmm... still getting:
Fatal error: Class 'Hybridauth\Hybridauth' not found in /var/www/vendor/OrgHeiglHybridAuth/src/OrgHeiglHybridAuth/Service/HybridAuthFactory.php
I'll have to continue this after I finish my break...
that looks like the Required hybridauth-library doesn't have that classmap as well. I'll have to investigate that later today.
Does your module use the HybridAuth 2.4x or 3.x version of that library? (Your readme.md files doesn't say which is the minimum version.)
Finally got it working! I just needed to declare a namespace for the hybridauth lib and create the classmap (array). (Oh, and use the 3.0.x version of the HybridAuth LIB...)
$vendorDir = "/var/www/vendor"; //this should be dirname(dirname(__FILE__));
$classMap = array(
'Hybridauth\\Adapter\\AbstractAdapter' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/AbstractAdapter.php',
'Hybridauth\\Adapter\\AdapterFactory' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/AdapterFactory.php',
'Hybridauth\\Adapter\\AdapterInterface' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/AdapterInterface.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\Application' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/Application.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\Endpoints' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/Endpoints.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\OAuth1Template' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/OAuth1Template.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\OAuthLib\\OAuthConsumer' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/OAuthLib/OAuthConsumer.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\OAuthLib\\OAuthDataStore' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/OAuthLib/OAuthDataStore.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\OAuthLib\\OAuthExceptionPHP' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/OAuthLib/OAuthExceptionPHP.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\OAuthLib\\OAuthRequest' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/OAuthLib/OAuthRequest.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\OAuthLib\\OAuthServer' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/OAuthLib/OAuthServer.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\OAuthLib\\OAuthSignatureMethod' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/OAuthLib/OAuthSignatureMethod.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\OAuthLib\\OAuthSignatureMethodHMACSHA1' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/OAuthLib/OAuthSignatureMethodHMACSHA1.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\OAuthLib\\OAuthToken' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/OAuthLib/OAuthToken.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\OAuthLib\\OAuthUtil' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/OAuthLib/OAuthUtil.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\Tokens' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/Tokens.php',
'Hybridauth\\Adapter\\Template\\OAuth1\\TokensInterface' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth1/TokensInterface.php',
'Hybridauth\\Adapter\\Template\\OAuth2\\Application' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth2/Application.php',
'Hybridauth\\Adapter\\Template\\OAuth2\\Endpoints' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth2/Endpoints.php',
'Hybridauth\\Adapter\\Template\\OAuth2\\OAuth2Template' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth2/OAuth2Template.php',
'Hybridauth\\Adapter\\Template\\OAuth2\\Tokens' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth2/Tokens.php',
'Hybridauth\\Adapter\\Template\\OAuth2\\TokensInterface' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OAuth2/TokensInterface.php',
'Hybridauth\\Adapter\\Template\\OpenID\\LightOpenID' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OpenID/LightOpenID.php',
'Hybridauth\\Adapter\\Template\\OpenID\\OpenIDTemplate' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Adapter/Template/OpenID/OpenIDTemplate.php',
'Hybridauth\\Endpoint' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Endpoint.php',
'Hybridauth\\Entity\\Album' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Album.php',
'Hybridauth\\Entity\\Comment' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Comment.php',
'Hybridauth\\Entity\\Entity' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Entity.php',
'Hybridauth\\Entity\\Facebook\\Event' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Facebook/Event.php',
'Hybridauth\\Entity\\Facebook\\Page' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Facebook/Page.php',
'Hybridauth\\Entity\\Facebook\\Profile' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Facebook/Profile.php',
'Hybridauth\\Entity\\Facebook\\Tab' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Facebook/Tab.php',
'Hybridauth\\Entity\\Group' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Group.php',
'Hybridauth\\Entity\\Photo' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Photo.php',
'Hybridauth\\Entity\\Post' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Post.php',
'Hybridauth\\Entity\\Profile' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Profile.php',
'Hybridauth\\Entity\\Twitter\\Post' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Twitter/Post.php',
'Hybridauth\\Entity\\Twitter\\Profile' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Twitter/Profile.php',
'Hybridauth\\Entity\\Video' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Entity/Video.php',
'Hybridauth\\Exception' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Exception.php',
'Hybridauth\\Http\\Client' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Http/Client.php',
'Hybridauth\\Http\\ClientInterface' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Http/ClientInterface.php',
'Hybridauth\\Http\\Request' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Http/Request.php',
'Hybridauth\\Http\\Response' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Http/Response.php',
'Hybridauth\\Http\\Util' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Http/Util.php',
'Hybridauth\\Hybridauth' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Hybridauth.php',
'Hybridauth\\Provider\\Facebook' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Provider/Facebook.php',
'Hybridauth\\Provider\\Google' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Provider/Google.php',
'Hybridauth\\Provider\\LinkedIn' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Provider/LinkedIn.php',
'Hybridauth\\Provider\\OpenID' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Provider/OpenID.php',
'Hybridauth\\Provider\\Twitter' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Provider/Twitter.php',
'Hybridauth\\Provider\\Windows' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Provider/Windows.php',
'Hybridauth\\Provider\\Yahoo' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Provider/Yahoo.php',
'Hybridauth\\Storage\\Memory' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Storage/Memory.php',
'Hybridauth\\Storage\\Session' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Storage/Session.php',
'Hybridauth\\Storage\\StorageInterface' => $vendorDir . '/hybridauth/hybridauth/src/Hybridauth/Storage/StorageInterface.php',
'OrgHeiglHybridAuth\\Controller\\IndexController' => $vendorDir . '/OrgHeiglHybridAuth/src/OrgHeiglHybridAuth/Controller/IndexController.php',
'OrgHeiglHybridAuth\\HybridAuthUserWrapper' => $vendorDir . '/OrgHeiglHybridAuth/src/OrgHeiglHybridAuth/HybridAuthUserWrapper.php',
'OrgHeiglHybridAuth\\Module' => $vendorDir . '/OrgHeiglHybridAuth/Module.php',
'OrgHeiglHybridAuth\\Service\\HybridAuthFactory' => $vendorDir . '/OrgHeiglHybridAuth/src/OrgHeiglHybridAuth/Service/HybridAuthFactory.php',
'OrgHeiglHybridAuth\\Service\\IndexControllerFactory' => $vendorDir . '/OrgHeiglHybridAuth/src/OrgHeiglHybridAuth/Service/IndexControllerFactory.php',
'OrgHeiglHybridAuth\\Service\\SessionFactory' => $vendorDir . '/OrgHeiglHybridAuth/src/OrgHeiglHybridAuth/Service/SessionFactory.php',
'OrgHeiglHybridAuth\\UserInterface' => $vendorDir . '/OrgHeiglHybridAuth/src/OrgHeiglHybridAuth/UserInterface.php',
'OrgHeiglHybridAuth\\UserWrapperFactory' => $vendorDir . '/OrgHeiglHybridAuth/src/OrgHeiglHybridAuth/UserWrapperFactory.php',
'OrgHeiglHybridAuth\\View\\Helper\\HybridAuth' => $vendorDir . '/OrgHeiglHybridAuth/src/OrgHeiglHybridAuth/View/Helper/HybridAuth.php'
);
$namespaces = array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
'Hybridauth' => array($vendorDir . '/hybridauth/hybridauth/src'),
);
Then load these arrays via the getAutoConfig() method of the Module.php file.
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\ClassMapAutoloader' => $classmap,
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => $namespaces,
'fallback_autoloader' => true
)
);
}
The downside of this technique is that is couples this module with HybridAuth lib a bit tightly... And any time you upgrade the lib, you have to run the classmap generator from ZF2 to remap the lib. (At least until they update from prefixes to namespaces.
Well, exactly that's the thing composer solves :stuck_out_tongue_winking_eye:
I think I'll provide a script which will create that classmap-file on demand. So you'd be able to include that into a build-script. Do you run phing or any other automation-tool?
Nope. I do most of this by hand. :gun:
I don't (can't) use composer.
What is the correct directory structure for hybridAuth and this module to function for SSO?