2017-01-07 182 views
1

我对php比较陌生,但我试图重定向并从我的应用程序登录到外部URL。我有证书,并试图张贴他们,但我真正能够实现的是“成功”。如果我通过laravel的 - > redirect()或标头(位置:blah.php)重定向,则会出现我的凭据未发送的错误。我已经尝试使用cURL和Guzzle到目前为止。是否有通过登录凭据重定向的工作示例?php重定向并登录

尝试1:

$client = new Client(array('curl' => array(CURLOPT_SSL_VERIFYPEER => false))); 

     $url = "url.php"; 
     $data = array('email' => '[email protected]', "pass" => 'pass'); 
     $data_string = json_encode($data); 

     $res = $client->post($url, [ 'body' => $data_string ]); 
     $code = $res->getStatusCode(); 

     if($code == '200'){ 
      $this->redirect($url); 

      // return redirect()->away($url); 
     } else { 
      return redirect('/register') 
    } 

尝试2:

$POSTFIELDS = json_encode($data); 
$cookie_file_path = "cookie.txt"; 
$fp = fopen($cookie_file_path,'w'); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$url); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS,$POSTFIELDS); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file_path); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file_path); 
$result = @curl_exec ($ch); 

if($result) { 
    header("Location: url.php"); 
} 

curl_close ($ch); 

预期的行为,用户在当前应用程序保存的数据,将被添加到注册DB然后这些凭证传递给继承应用程序对登录,他们在那里看到该页面,就好像他们在那里登录一样。

+0

因此,我们你试过什么,什么是输出和什么是你的预期输出? –

+0

@MASIDDIQUI,请参阅编辑 – itchyclothes

+0

嗯,这里有两个不同的会话。一个在用户和你的服务器之间,一个在你的服务器和你的旧版应用之间。您需要将会话cookie从旧应用程序设置到您的用户会话。 –

回答

0

您需要进行会话。例如:

$cookies = curl_get_cookies($curl_handle); 
$session_cookie = $cookies['PHPSESSID']; 
session_set('PHPSESSID', $session_cookie); 

或者,您可以生成自动发布HTML表单。例如:

<form id="auto-login" method="POST" action="<?PHP echo htmlentitites($url); ?>"> 
    <input type="hidden" name="email" value="<?PHP echo htmlentities('[email protected]'); ?>" />   
    <input type="hidden" name="pass" value="<?PHP echo htmlentities('pass'); ?>" /> 
</form> 

<script> 
$('#auto-login').submit(); 
</script>