2016-12-14 7 views
0

ログイン用のWordpressページテンプレートを作成し、APIを使用して外部ログインを確認しました。これは私が使用しているコードです。WPテンプレートコードが実行前に実行される

<?php 
/* 
Template Name: Login 
*/ 
if(isset($_POST['username']) && !empty($_POST['username'])){ 

    global $wpdb; 

    //We shall SQL escape all inputs 
    $username = $wpdb->escape($_REQUEST['username']); 
    $password = $wpdb->escape($_REQUEST['password']); 
    $remember = $wpdb->escape($_REQUEST['rememberme']); 

    if($remember) $remember = "true"; 
    else $remember = "false"; 

    $login_data = array(); 
    $login_data['user_login'] = $username; 
    $login_data['user_password'] = $password; 
    $login_data['remember'] = $remember; 

    $user_verify = wp_signon($login_data, false); 

     if(is_wp_error($user_verify)){ 
      $token = ''; 
      $url = "URL"; 
      $cookie = "h8gkh8.txt"; 
      $ch = curl_init(); 

      curl_setopt($ch, CURLOPT_URL, $url); 
      curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/' . $cookie); 
      curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/' . $cookie); 

      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

      $response = curl_exec($ch); 
      if (curl_errno($ch)) 
       die(curl_error($ch)); 

      $doc = new DOMDocument(); 
      $doc->loadHTML($response); 
      $el = $doc->getElementsByTagName("input"); 

      for ($i = 0; $i < $el->length; $i++) { 
       $attr = $el->item($i)->getAttribute('name'); 
       if ($attr == '_csrfhash') { 
        $token = $el->item($i)->getAttribute('value'); 
       } 
      } 

      curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
      curl_setopt($ch, CURLOPT_POST, 1); 

      $params = array(
       'scemail' => $username, 
       'scpassword' => $password, 
       '_csrfhash' => $token 
      ); 

      curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); 

      $r = curl_exec($ch); 

      if (curl_errno($ch)){ 
       print curl_error($ch); 
      }else{ 
       $login_data = array(); 
       $login_data['user_login'] = "Custom username"; 
       $login_data['user_password'] = "Custom password"; 
       $login_data['remember'] = $remember; 
       $user_verify = wp_signon($login_data, false); 
       echo "<script type='text/javascript'>window.location='". home_url() ."'</script>"; 
       exit(); 
      } 
      curl_close($ch); 

      header("Location: " . home_url() . "/login/error/"); 
      //Note, I have created a page called "Error" that is a child of the login page to handle errors. This can be anything, but it seemed a good way to me to handle errors.*/ 
     }else{ 
      echo "<script type='text/javascript'>window.location='". home_url() ."'</script>"; 
      exit(); 
     } 

} 
else{ 
     // No login details entered - you should probably add some more user feedback here, but this does the bare minimum 
     echo "Invalid login details"; 

    }; 

?> 
<form id="login" name="form" action="<?php echo home_url(); ?>/login/" method="post"> 
     <input id="username" type="text" placeholder="Username" name="username"> 
     <input id="password" type="password" placeholder="Password" name="password"> 
     <input id="submit" type="submit" name="submit" value="Submit"> 
</form> 

私の問題は、私は送信ボタンをクリックする前にPHPコードセクションが実行されることで、皆さんがこれを解決するために私を助けてくださいことができますか?

おかげ

PS:あなたは私のコード内の他のエラーが表示された場合も、それらを報告して自由に感じます!

+0

「無効なログインの詳細」というメッセージが表示されると思います。 – secelite

+0

あなたが正しいです、私はメッセージを受け取って、その後にフォーム – StoneSmith

答えて

0

コードが正しく動作しています。 else部分を削除するだけです

 <?php 
     /* 
     Template Name: Login 
     */ 
     if((isset($_POST['username'])) && (!empty($_POST['username']))){ 

      //We shall SQL escape all inputs 
      $username = $wpdb->escape($_REQUEST['username']); 
      $password = $wpdb->escape($_REQUEST['password']); 
      $remember = $wpdb->escape($_REQUEST['rememberme']); 

      if($remember) $remember = "true"; 
      else $remember = "false"; 

      $login_data = array(); 
      $login_data['user_login'] = $username; 
      $login_data['user_password'] = $password; 
      $login_data['remember'] = $remember; 

      $user_verify = wp_signon($login_data, false); 

       if(is_wp_error($user_verify)){ 
        $token = ''; 
        $url = "URL"; 
        $cookie = "h8gkh8.txt"; 
        $ch = curl_init(); 

        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_COOKIEJAR, '/tmp/' . $cookie); 
        curl_setopt($ch, CURLOPT_COOKIEFILE, '/tmp/' . $cookie); 

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

        $response = curl_exec($ch); 
        if (curl_errno($ch)) 
         die(curl_error($ch)); 

        $doc = new DOMDocument(); 
        $doc->loadHTML($response); 
        $el = $doc->getElementsByTagName("input"); 

        for ($i = 0; $i < $el->length; $i++) { 
         $attr = $el->item($i)->getAttribute('name'); 
         if ($attr == '_csrfhash') { 
          $token = $el->item($i)->getAttribute('value'); 
         } 
        } 

        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0); 
        curl_setopt($ch, CURLOPT_POST, 1); 

        $params = array(
         'scemail' => $username, 
         'scpassword' => $password, 
         '_csrfhash' => $token 
        ); 

        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); 

        $r = curl_exec($ch); 

        if (curl_errno($ch)){ 
         print curl_error($ch); 
        }else{ 
         $login_data = array(); 
         $login_data['user_login'] = "Custom username"; 
         $login_data['user_password'] = "Custom password"; 
         $login_data['remember'] = $remember; 
         $user_verify = wp_signon($login_data, false); 
         echo "<script type='text/javascript'>window.location='". home_url() ."'</script>"; 
         exit(); 
        } 
        curl_close($ch); 

        header("Location: " . home_url() . "/login/error/"); 
        //Note, I have created a page called "Error" that is a child of the login page to handle errors. This can be anything, but it seemed a good way to me to handle errors.*/ 
       }else{ 
     echo "<script type='text/javascript'>window.location='". home_url() ."'</script>"; 
     exit(); 
    } 

     } 

     ?> 
     <form id="login" name="form" action="<?php echo home_url(); ?>/login/" method="post"> 
       <input id="username" type="text" placeholder="Username" name="username"> 
       <input id="password" type="password" placeholder="Password" name="password"> 
       <input id="submit" type="submit" name="submit" value="Submit"> 
     </form> 
+0

私は別の問題があります... whit code doenは、セクションとifernameとパスワードが間違っている場合、2番目のセクションに入りたい場合 – StoneSmith

+0

if(is_wp_error($ user_verify) ){このコードはユーザー名が正しいかどうかをチェックしています。 'isset'ユーザー名が正しいかどうかをチェックしません。 – vel

+0

if(isset($ _ POST ['username'])&&!empty($ _ POST ['username'])){このコードはフォームが送信しているかどうかだけをチェックしています。とヘッダー( "場所:"。home_url()。 "/ login/error /");これは、ユーザー名とパスワードが間違っているとコードリダイレクトされます。 – vel

0

if/else文を調整する必要があります。 $_POST['username']が設定されていて空でないかどうかを確認しています。いずれかが当てはまらない場合は、ログイン情報が無効です

ユーザーがサイトにアクセスすると、pronlemは、$_POST['username']が決して設定されません。 $_POST['username']設定とそれが空である場合

if(isset($_POST['username']) && !empty($_POST['username'])){ 
    /* your code */ 
} elseif(isset($_POST['username']) && empty($_POST['username'])) { 
    echo "Invalid login details"; 
} 

これに加えてチェックを:あなたは次のようにこのケースをキャッチするためのelseifステートメントを使用することができます。これが当てはまる場合、メッセージが表示されます。

関連する問題