как получить данные в скрытой форме (пост), используя LightOpenId - PullRequest
0 голосов
/ 21 декабря 2011

Я пытаюсь создать систему входа в систему, которая использует openid для этого, я использовал следующий код

<?php
require 'openid.php';

try{
$openid = new LightOpenID('www.mydomain.com');

if(!$openid->mode){
    if(isset($_GET['login'])){
   if(isset($_POST["google"])){
    $openid->identity = 'https://www.google.com/accounts/o8/id';
   }
   elseif(isset($_POST["yahoo"])){
    $openid->identity = 'https://me.yahoo.com';
       }
   else{ //do nothing }

       $openid->required = array('namePerson/friendly', 'contact/email');
       header('Location: ' . $openid->authUrl());
    }
 ?>
 <form action="?login" method="post">
   <button id="google" name="google">Login with Google</button>
   <button id="yahoo" name="yahoo">Login with Yahoo</button>
 </form>
 <?php
}
else{   
    echo 'User ' . ($openid->validate() ? ' has ' : 'has not ') . 'logged in.'; 
}
 } catch(ErrorException $e) {
   echo $e->getMessage();
 }
 ?>

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

Заранее спасибо.

1 Ответ

1 голос
/ 22 декабря 2011

Если я правильно понимаю, вы не хотите, чтобы провайдер отправлял параметры openid с помощью GET.Ну, вы не можете заставить поставщика посылать вам что-то через POST (или GET, или любой другой http-метод).Некоторые делают это, другие нет, LightOpenID сам поддерживает получение данных как из POST, так и из GET, но по-прежнему нет способа заставить провайдера использовать любой из них.

Однако вы можете немедленно перенаправить пользователя надругой страницы, чтобы он не видел URL, если вы этого хотите.

...