0

Hi Sirs,

can anyone have an idea reagarding lightopenid log-in on Laravel 4.

i want to make a website using google account on log in.

Thanks in advance.

2
Contributors
4
Replies
36
Views
3 Years
Discussion Span
Last Post by cereal
0

Hi, you can include it via composer, in your shell write:

composer require lightopenid/lightopenid:dev-master

Or edit composer.json and to require add:

"lightopenid/lightopenid": "dev-master"

And perform composer update from the terminal. I didn't tested, but it should work like this:

Route::get('/openid', function()
{
    $opID = new LightOpenID('yourdomain.tld');
    if( ! $opID->mode)
    {
        $opID->identity = 'https://www.google.com/accounts/o8/id';
        return Redirect::to($opID->authURL());
    }

    elseif($opID->mode == 'cancel')
    {
        return "User has canceled the authentication";
    }

    else
    {
        # validation here
        if($opID->validate())
        {
            return print_r($opID->identity, true);
        }
        else
        {
            return 'Not logged';
        }
    }
});

The above is based on the example-google.php file that you can find into the archive here:

Check also packagist, which is the repository for composer:

Edited by cereal

0

i already have the log-in form i have a code :

on my controller

<?php

class OpenidController extends BaseController {
public function showlogin()
        {
            return View::make('login');
        }

    }

on my route

<?php

Route::resource('/','OpenidController@showlogin');

my question is where should i place t he code to make it work.

Thanks in advance

0

Ok, first of all a resource controller is not meant to define a specific method, but a set of actions that will work using RESTful verbs, this means than in your routes.php file you should to change this:

Route::resource('/','OpenidController@showlogin');

to:

Route::resource('/openid','OpenidController');

But I suggest you to use resource controllers for an API application, because a resource controller expects the use of specific methods and HTTP verbs, as defined here:

So, in your routes.php file change the above with:

Route::get('/openid', 'OpenidController@showLogin');
Route::post('/openid', 'OpenidController@postLogin');

And inside your controller:

class OpenidController extends BaseController {

    public function showLogin()
    {
        return View::make('login');
    }

    public function postLogin()
    {
        $opID = new LightOpenID('localhost'); # CHANGE ME

        if(! $opID->mode)
        {
            $opID->identity = 'https://www.google.com/accounts/o8/id';
            return Redirect::to($opID->authURL());
        }

        elseif($opID->mode == 'cancel')
        {
            return "User has canceled the authentication";
        }

        else
        {
            # validation here
            if($opID->validate())
            {
                return print_r($opID->identity, true);
            }
            else
            {
                return 'Not logged';
            }
        }
    }

Inside the login view create a form that will use the POST method:

<!DOCTYPE html>
<html>
<head>
    <title>Open ID</title>
</head>
<body>

    <form method="post" action="/openid">
        <input type="submit" name="login" value="Google log in" />
    </form>

</body>
</html>

Note that the form action is pointing always to /openid.

When you perform a GET request over /openid you will get the form, when instead you perform a POST request you will process postLogin method.

Important Note: the OpenID login method is deprecated by Google and will be removed in few years, more information here:

I don't know if LightOpenID is going to support the new method, as wrote here:

So consider to use another library like OpAuth:

This has already a package for Laravel, but it is for version 3.0, I haven't tested this, so right now I cannot help you much. Before deciding, I suggest you to check on packagist.org if there are other good alternatives.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.