/DCSOpauthBundle

DCSOpauthBundle is a Symfony2 bundle that enables support for many authentication providers through the Opauth framework

Primary LanguagePHPMIT LicenseMIT

DCSOpauthBundle

DCSOpauthBundle is a Symfony2 bundle that enables support for many authentication providers through the Opauth framework.

Installation

a) Download and install DCSOpauthBundle

To install DCSOpauthBundle run the following command

bash $ php composer.phar require damianociarla/opauth-bundle

b) Install Opauth strategy

To install the Opauth strategy, you need find the required package on Packagist or on GitHub and add it to the require list of your project's composer.json file.

This is an example of the Facebook strategy:

bash $ php composer.phar require opauth/facebook

c) Enable the bundle

To enable it add the bundle instance in the kernel:

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
    	// ...
    	new DCS\OpauthBundle\DCSOpauthBundle(),
	);
}

d) Configure the bundle

Now that you have properly enabled the DCSOpauthBundle, the next step is to configure the bundle to work with the specific needs of your application.

Add the following configuration to your config.yml file according the types of strategies you want to use in your application.

# app/config/config.yml

dcs_opauth:
    strategies:
        # The name of the strategy is personal. es: google, facebook, google_app_2 etc...
        google:
            id:             YOUR_CLIENT_ID
            secret:         YOUR_CLIENT_SECRET
            strategy_class: Google

        # Facebook example with option scope
        facebook:
            id:             YOUR_APP_ID
            secret:         YOUR_APP_SECRET
            strategy_class: Facebook
            options:
                scope: "email"

For a list of the configurations of the strategies refer to the original configuration of Opauth library.

e) Import DCSOpauthBundle routing files

Now that you have activated and configured the bundle, all that is left to do is import the DCSOpauthBundle routing files:

# app/config/routing.yml

dcs_opauth_connect:
    resource: "@DCSOpauthBundle/Resources/config/routing/connect.xml"
    prefix: /connect

dcs_opauth_response:
    resource: "@DCSOpauthBundle/Resources/config/routing/response.xml"
    prefix: /connect

How does it work?

DCSOpauthBundle logs on the selected provider and provides a token to use in the user's session.

How to log on the provider?

You must perform a redirect on the route dcs_opauth_connect passing the parameter {provider}

# twig example

<a href="{{ url('dcs_opauth_connect', {'provider' : 'google'}) }}">Login with Google</a>

Complete configuration

dcs_opauth:
    debug_mode: false                                       # (boolean) Whether debug messages are to be displayed
    callback_transport: session                             # ('session','post','get') HTTP transport type, for sending of Auth response
    security_iteration: 300                                 # (int) The number of times hashing is done to sign auth response
    security_timeout: 2 minutes                             # (string) Time limit allowed for an auth response to be considered valid
    authentication_roles: [ROLE_USER]                       # (array) Roles to associate with the token
    redirect_after_response: ~                              # (string) Path or view_name to redirect user after login
    error_view: DCSOpauthBundle:Response:error.html.twig    # (string) View name to display the errors if the login fails
    logic:
        strategy_parser: dcs_opauth.configuration.strategy_parser.default   # Service name to retrieve the config for a specific strategy
        response_parser: dcs_opauth.response.response_parser.default        # Service name to parse the Opauth's response
        authenticator: dcs_opauth.security.authenticator.default            # Service name that autenticates user
    strategies:
        NAME:
            id:                 SECRET_ID
            secret:             SECRET_KEY
            strategy_class:     STRATEGY_CLASS
            options:            STRATEGY OPTIONS