2017-05-14 33 views
3

我试图将一个登录Web界面连接到已在AWS上创建的身份验证活动存储库。我是新的,我已经尝试使用邮差这样做,与这样的JSON应用原始模板:在PHP中处理cURL

{ 
"userName" : "Victor", 
"userPassword" : "pwd123" 
} 

而且它正常工作,我收到我的信息库中的正确答案。但是当我使用我的php项目来完成这项工作时,我用相同的数据填充表单,我收到一个状态:403消息:错误的用户名或密码。

邮差代码,为我提供了CURLOPT_POSTFIELDS该解决方案:

CURLOPT_POSTFIELDS => "{\n\t\"userName\" : \"Victor\",\n\t\"userPassword\" : \"pwd123\"\n}", 

但我需要填充表单字段这让我改变他们,我会告诉你。

下面是我用的,我真的卡住,所以我会心存感激的任何帮助:)

public function loginAction(Request $request) 
{ 
    $twigParams=array(); 
    $DTO = new LoginDTO($request, $this->container, null); 
    $form = $DTO->getForm(); 
    $form->handleRequest($request); 
    if ($form->isSubmitted() && $form->isValid()) { 

     $upass = $DTO->getUserPass(); 
     $uname = $DTO->getUserName(); 

     $curl = curl_init(); 

     $fields=array("userName"=> $uname, "userPassword"=> $upass); 
     curl_setopt_array($curl, array(
      CURLOPT_PORT => "80", 
      CURLOPT_URL => "http://wt-services-internal-appl-blablabla..", 
      CURLOPT_RETURNTRANSFER => true, 
      CURLOPT_ENCODING => "", 
      CURLOPT_MAXREDIRS => 10, 
      CURLOPT_TIMEOUT => 30, 
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 
      CURLOPT_CUSTOMREQUEST => "POST", 
      CURLOPT_POSTFIELDS => $fields , 
      CURLOPT_HTTPHEADER => array(
       "cache-control: no-cache", 
       "content-type: application", 
       ), 
     )); 

     $response = curl_exec($curl); 
     $err = curl_error($curl); 

curl_close($curl); 

$twigParams["form"]=$form->createView(); 
return $this->render('auth/login.html.twig', $twigParams); 
} 
+0

现在已经解决了,我注意到在我的身份验证存储库中,我有JSON格式的访问数据,而且我没有以JSON格式发送数据,所以我做的正确的是: $ fields = array(“userName”=> $ uname,“userPassword”=> $ upass); $ fields = json_encode($ fields); 然后我将该数组放入CURLOPT_POSTFIELDS中,并在CURLOPT_HTTPHEADER中将“content-type:application/json”的“content-type:application”更改为。无论如何,请继续编码! –

+2

写这个评论作为一个答案,而不是接受它。它将为您赢得一点名誉,并让其他开发者更容易看到答案。 – Ray

回答

0

我注意到,在我的认证资源,我有一个JSON格式的访问数据的代码我没有以JSON格式发送数据。为了解决这个问题,我这样做:

$fields = array("userName" => $uname, "userPassword" => $upass); 
$fields = json_encode($fields); 

我把数组中的CURLOPT_POSTFIELDS,改变“内容类型:应用”到“内容类型:应用程序/ JSON”,在CURLOPT_HTTPHEADER

这样做解决了问题。