2015-10-01 45 views
2

其實我一直在使用angularjs和restfullapis.i忘記身份驗證部分發送密鑰給丟失的用戶郵件以獲取重置密碼面板。用戶點擊郵件中的驗證網址(http://workless/services/user/reset_pwd_confirm?verification_id=72e03c6aa3268cd37067243945ac69aa&user_id=5)以下apis電話。如何使用php curl從api發佈數據重定向?

private function reset_pwd_confirm(){ 
     if($this->get_request_method() != "GET"){ 
      $this->response('',406); 
     } 
     $verification_id = $this->_request['verification_id']; 
     $user_id = $this->_request['user_id']; 
     if(!empty($verification_id) && !empty($user_id) && $user_id > 0){ 
      $tm=time()-86400; 
      $query = "SELECT user_id FROM user_pwd_reset WHERE user_id='".$user_id."' AND act_key='".$verification_id."' AND time > ".$tm.""; 
      $get_user = $this->db->get_row($query);     
      if($this->db->num_rows == 1){ 
       $curl = curl_init('http://localhost:3000/#/reset'); 
       curl_setopt($ch,CURLOPT_POST, 1); 
       curl_setopt($ch,CURLOPT_POSTFIELDS, 'user_id='.$user_id); 
       curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); 
       curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); 

       curl_exec($curl);    
      }else{ 
       $success = array('status' => "Failed", "msg" => "key and user are not match."); 
       $this->response($this->json($success),404); 
      } 
     }else{ 
      $success = array('status' => "Failed", "msg" => "Invaild verification or user id."); 
      $this->response($this->json($success),404); 
     } 

    }   

在這裏,我需要移動稱爲http://localhost:3000/#/reset與後USER_ID角頁面,爲此,我用捲曲正如我上面提到但返回錯誤爲「不能發佈/」。 是什麼問題?請告訴我。 我認爲問題是從http get方法請求發佈,是嗎? 請給我的解決方案...

+0

選中此http://stackoverflow.com/問題/ 27670975/can-post-curl-to-nodejs-socket-io#並且發佈你的api代碼,以便我們可以看到什麼是錯誤的。 –

回答

0

如果我的理解是正確的比你想要達到的目標是:

用戶點擊電子郵件中的鏈接(即GET請求),它應該觸發另一個POST請求。對? 如果通過服務器端重定向可以實現,我會感到驚訝。你可以通過javascript在客戶端解決它。

但是:您確實需要POST請求嗎? 您的網址中已有verification_id。因此,當用戶點擊它時,服務器可以重置密碼或將用戶重定向到「密碼重置表單」並使verification_id無效。所以verification_id最多可以使用1次。

那會好嗎?

但是,如果您真的需要執行該POST請求,這裏是如何。 一旦用戶點擊該鏈接,就會導致他定製的網頁像這樣的東西

HTML:

<body onload="onLoad()"> 
    <form style="display:none" method="POST" action="some_url" id="myform"> 
    <input type="hidden" name="user_id" value="your_user_id">  
    </form> 
</body> 

的javascript:

function onLoad() { 
    var form = document.getElementById('myform'); 
    form.submit(); 
} 
+0

爲什麼我需要http:// localhost:3000 /#/ reset的發佈請求,我需要用該用戶ID進一步附加密碼併發送重置密碼的發佈請求。這就是爲什麼我試圖發送post_user_id數據與該網址。 – user3391137

+0

我不在乎在這裏通過發佈保護user_id,我只是發送user_id作爲發佈類型來獲取重置api中的user_id數據,因爲我們只能發送重置api中的發佈類型數據,因爲密碼數據。 – user3391137

+0

private function reset_pwd(){if($ this-> get_request_method()!=「POST」){this-> response('',406); } $ data = json_decode(file_get_contents(「php:// input」),true);如果(!empty($ data ['user_id'])){ $ user_pwd = $ data ['user_pwd']; $ user_id = $ data ['user_id'];如果(!empty($ user_pwd)){ $ query =「UPDATE user SET password ='」。$ data ['user_pwd']。''WHERE user_id ='「。$ user_id。」'「;}}}/*這是我的重置api – user3391137