我正在尝试创建使用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方法)。
提前致谢。
答案 0 :(得分:1)
如果我理解正确,您不希望提供程序使用GET发送openid参数。 好吧,你不能强迫提供者通过POST(或GET,或任何其他http方法)向你发送一些东西。有些人这样做,有些人没有,LightOpenID本身支持从POST和GET接收数据,但是仍然没有办法强制提供者使用任何一个。
然而,您可以立即将您的用户重定向到另一个页面,这样他就不会看到该网址,如果这就是您想要的。