Säker Inloggning med LightOpenID

LightOpenID är ett script som låter en användare identifiera sig genom sitt Google konto (plus ett gäng andra, inklusive OpenID), och vi kommet att jobba med en variant som används tillsammans med PHP (finns för andra språk också). Du kan ladda ner den senaste versionen härifrån. Det går att logga in med flera olika tjänster, som;  är ett väldigt säkert alternativ.

Ett annat alternativ för PHP är ett projektet som använder LightOpenID; HybridAuth vilken använder sig av sociala inloggningar med; OpenID, Facebook, Twitter, LinkedIn, Google, Yahoo, Windows Live, Foursquare och AOL och många fler. Du kan hitta en lista över dom i dokumentationen.

Användaren kommer att refereras till som » A

 

Vi börjar med att skriva in följande i huvudmenyn:

// skriv in det här i din huvudmeny
if (!$_SESSION['email']) {
    // om A inte loggat in än, visa "Logga in" länk
    echo '<li><a href="login.php">Logga in</a></li>';
} else {
    // om A har loggat in visas logga ut i menyn
    echo '<li><a href="logout.php">Logga ut</a></li>';
}

…och nästa steg blir att sätta in följande i din login.php:

// login.php
// skapa en ny instans av LightOpenID, med länk till din webb-rot
$openId = new LightOpenID('http://localhost/~dok/login_google/');

// vi använder oss av Google:s inloggning
// den här adressen hämtas till menyn lite längre ner på sidan
$openId->identity = 'https://google.com/accounts/oB/id';

// här specifierar vi vad vi vill veta => förnamn, email och land 
$openId->required = array(
'namePerson/first',
'contact/email',
'contact/country/home'
);

// och så anger vi en return URL som A ska skickas till efteråt
$openId->returnUrl = 'account.php';
?>

<h1>Logga in på sidan</h1>

<!-- och en inloggningslänk > Länk till Google login -->
<a href="<?php $openId->authUrl() ?>">Logga in med Google</a>

<!-- och en vanlig inloggningsformulär -->
<form action="login.php" method="POST">
    <label for="username">Användarnamn:</label><br />
    <input type="text" name="username" /><br />
    <label for="pass">Lösenord</label><br />
    <input type="password" name="pass" /><br />
    <input type="submit" value="Logga in" />
</form>

…och efter att A har klickat på verifiera med Google och verifierat att A låter oss använda A:s email och namn, skickas A till account.php:

// account.php
require_once 'includes/openid.php';

$openId = new LightOpenID('http://localhost/~dok/login_google/');

if ($openId->mode) {
    if ($openId->mode == 'cancel') {
        echo 'Error: användare avbröt inloggning';
    }  elseif ($openId->validate()) {
        // hämta alla attribut för A som vi fick från Google
        $data = $openId->getAttributes();
        $email = $data['contact/email'];
        $fist = $data['namePerson/first'];
        $homeCountry = $data['contact/country/home'];
        
        // sätt attributen till session variabler
        $_SESSION['email'] = $email;
        $_SESSION['firstname'] = $fist;
        $_SESSION['home'] = $homeCountry;

        // skicka A tillbaka till hemsidan
        header('Location: http://localhost/~dok/login_register/');
    }  else {
        echo 'Error: Användare har inte loggat in';
    }
}  else {
    echo 'Error: Gå till hemsidan för att logga in';
}

…nu skickas A till index.php, och där kollar vi om A loggat in och visar lämplig länk i menyn:

if (!$_SESSION['email']) {
    // om användaren avbröt verifiering visas Logga in
    echo '<li><a href="' . $openId->authUrl() . '">Logga in</a></li>';
} else {
    // logga ut länk visas nu istället
    echo '<li><a href="login.php">Logga ut</a></li>';
}

…och i logout.php ska följande in:

// skapa en session så vi kommer åt alla sessions
session_start();

// "förstör" alla sessions
session_destroy();

// skicka tillbaka till hemsidan
header('Location: http://localhost/~dok/login_register/');

Så där nu ska du kunna komma igång med LightOpenID. Och till nästa gång, koda smart 😉

 

Leave a Comment

E-postadressen publiceras inte. Obligatoriska fält är märkta *

*
*