LightOpenID аутентификация с использованием метода POST - PullRequest
3 голосов
/ 09 февраля 2011

Есть ли способ аутентификации с использованием библиотеки LightOpenID с использованием метода POST?Точнее, после аутентификации Google (например) возвращается по указанному URL, но все данные отправляются мне с помощью метода GET, который заканчивается в уродливом и длинном URL.

Мой код:

define('BASE_URL', 'http://someurl.com');

try {
    $openid = new LightOpenID();

    if (!isset($_GET['openid_mode'])) {
        // no openid mode was set, authenticate user
        $openid->identity = 'https://www.google.com/accounts/o8/id';
        $openid->realm = BASE_URL;
        $openid->required = array('contact/email');

        header('Location: '.$openid->authUrl());

    } else if ($_GET['openid_mode'] == 'cancel') {
        // user canceled login, redirect them
        header('Location: '.BASE_URL);

    } else {
        // authentication completed, perform license check
        if ($openid->validate()) {
            $openid->getAttributes();
        }
    }

} catch (ErrorException $e) {

}

Итак, после аутентификации OP возвращается к URL, который выглядит примерно так:

http://someurl.com/index.php?openid.ns=http://specs.openid.net/auth/2.0&openid.mode=id_res&openid.op_endpoint=https://www.googl...

И я хочу, чтобы OP вернулся к:

http://someurl.com/index.php

и отправьте все данные, используя POST, а не GET.

Ответы [ 2 ]

1 голос
/ 16 февраля 2011

Я работал над тем же.Смотрите код ниже.Я думаю, что это должно помочь.

<?php 
require 'lightopenid/openid.php';
try {
    $openid = new LightOpenID;                       
    if(!$openid->mode) {
        if(isset($_GET['login'])) {
            $openid->identity = 'https://www.google.com/accounts/o8/site-xrds?hd=yourdomain.com';         
        $openid->required = array('namePerson/friendly', 'contact/email' , 'contact/country/home', 'namePerson/first', 'pref/language', 'namePerson/last'); 
            header('Location: ' . $openid->authUrl());    
        }
?>
<form action="?login" method="post">
    <button>Login with Google</button>
</form>
<?php
    } elseif($openid->mode == 'cancel') {
        echo 'User has canceled authentication !';
    } else {
        session_start();
        $fname = $openid->ret_fname();                        // setting session
        $lname = $openid->ret_lname();                        // setting session
        $email = $openid->ret_email();                        // setting session
        $_SESSION['admin']['name'] = $fname.' '.$lname;       // setting session
        $_SESSION['admin']['emailID'] = $email;               // setting session

        header('Location:approve.php');  // PUT YOUR PAGE/URL HERE.... I THINK THIS SHOULD DO THE TRICK !!! 
    }
} catch(ErrorException $e) {
    echo $e->getMessage();
}
0 голосов
/ 03 декабря 2012

Возможно, что это невозможно, согласно главному ответу на этот вопрос: Response.Redirect с POST вместо Get?

Ответ аутентификации от Google обратно на вашу страницуобработчик может быть «запросом», а не «перенаправлением», так что я все еще не уверен.

Перенаправление себя после ответа с использованием POST, как указано выше, кажется хорошим решением.

Другое решение может заключаться в том, чтобы похоронить весь процесс с помощью AJAX.

...