heiglandreas / HybridAuth

Integrates SocialConnect as SIMPLE authentication-backend into the ZendFramework 3
https://hybridauth.heigl.org
21 stars 8 forks source link

Manual setup steps #20

Closed lorezyra closed 9 years ago

lorezyra commented 9 years ago

I don't (can't) use composer.

What is the correct directory structure for hybridAuth and this module to function for SSO?

lorezyra commented 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?

heiglandreas commented 9 years ago

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:

lorezyra commented 9 years ago

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/

lorezyra commented 9 years ago

Regarding composer, it's not allowed by our team leader.

heiglandreas commented 9 years ago

seriously? Sorry to hear that.

heiglandreas commented 9 years ago

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:

lorezyra commented 9 years ago

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...

lorezyra commented 9 years ago

That would be awesome! IF you give me a paypal address, I'll send you some beer money :beers: :moneybag: !

lorezyra commented 9 years ago

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.

lorezyra commented 9 years ago

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...

heiglandreas commented 9 years ago

that looks like the Required hybridauth-library doesn't have that classmap as well. I'll have to investigate that later today.

lorezyra commented 9 years ago

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.)

lorezyra commented 9 years ago

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.

heiglandreas commented 9 years ago

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?

lorezyra commented 9 years ago

Nope. I do most of this by hand. :gun: