2017-05-04 16 views
0

ログインページ用のAPIを作成しています。パスワードは暗号化され、データベースに「$ 2y $ 08 $ NwjkR19Vafs28PuSmVrd6OIpL2ix2hUZn4cFwwJqseUQJZqJIXpia」という名前で保存されています。 、私は以下のコードを使用して試してみましたが、関係なく、私はここで入力したものをパスワードには有効なパスワードを示していないモバイルAPIで入力したパスワードを確認する方法

if (isset($postdata)) { 

    $request = json_decode($postdata); 

    $username = $request->username; 
    $password = $request->password; 

    if($username === NULL && $password === NULL) { 
     $json = array("status" => 0, "message" => "Please enter username and password"); 
    } 
    else { 

     $select_sql = "SELECT `id`, `first_name`, `last_name`, `email`, `phone`, `username`, `password`, `created_on`, `active`, `activation_code` FROM `users` WHERE `email` = '".$username."' AND `password` = '".$password."';"; 
     $select_query = mysqli_query($con,$select_sql); 
     $count = mysqli_num_rows($select_query); 
     $fetch_obj = mysqli_fetch_array($select_query,MYSQLI_BOTH); 
     if($count>0) { 

      $userId = $fetch_obj["id"]; 
      $userEmail = $fetch_obj["email"]; 
      $userDisplayName = $fetch_obj["first_name"]." ".$fetch_obj["last_name"]; 
      $userPhone = $fetch_obj["phone"]; 
      $userName = $fetch_obj["username"]; 
      $userPass = $fetch_obj["password"]; 
      $userCreatedOn = $fetch_obj["created_on"]; 
      $userActive = $fetch_obj["active"]; 
      $userActivationCode = $fetch_obj["activation_code"]; 

      $userDetails = array("UserID" => "$userId", "UserDisplayName" => "$userDisplayName", "UserEmail" => "$userEmail", "UserPhone" => "$userPhone", "UserName" => "$userName", "UserPassword" => "$userPass", "UserCreatedOn" => "$userCreatedOn","UserActive" => "$userActive", "UserActivationCode" => "$userActivationCode"); 

      $json = array("status" => 1, "message" => "Login success.", "UserDetails" => $userDetails); 
     } 
     else { 
      $json = array("status" => 0, "message" => "Invalid username or password.", "query" => $select_sql); 
     } 
    } 
} 
mysqli_close($con); 

: は、私は、SQLクエリを使用して入力されたパスワードに対してこれを確認するにはどうすればよい、以下の私のAPIコードです

<?php 

    echo $password = "[email protected]"; 
    echo $hash = password_hash($password, PASSWORD_BCRYPT); 
    if (password_verify($password, $hash)) { 
    echo 'Password is valid!'; 
    } else { 
    echo 'Invalid password.'; 
    } 
    ?> 

入力したパスワードを確認してユーザーをホームページにリダイレクトする方法はありますか? 私を助けてください、過去2日からこれでつかまっています。事前に感謝します

+0

パスワードの暗号化に使用した暗号方式は何ですか。 – ashanrupasinghe

+1

**警告**:独自のアクセス制御レイヤーを作成するのは簡単ではなく、重大な誤りを犯す機会がたくさんあります。 [Laravel](http://laravel.com/)のような最新の[開発フレームワーク](http://codegeekz.com/best-php-frameworks-for-developers/)がある場合は、独自の認証システムを作成しないでください。強力な[認証システム](https://laravel.com/docs/5.4/authentication)が組み込まれています。 – tadman

+0

**警告**:mysqliを使用する場合は、[パラメータ化されたクエリ](http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)と['bind_param']( http://php.net/manual/en/mysqli-stmt.bind-param.php)を使用してクエリにユーザーデータを追加します。 **重大な[SQLインジェクションのバグ](http://bobby-tables.com/)を作成したため、文字列の補間または連結を使用してこれを実行しないでください。 ** '$ _POST'、' $ _GET'、**任意の**ユーザデータを直接クエリーに入れないでください。誰かがあなたのミスを悪用しようとすると非常に危険です。 – tadman

答えて

1

次回よりコードを整理してください。パスワードに基づいてハッシュを設定すると、結果のハッシュとそのパスワードを確認するため

この機能

<?php 
echo $password = "[email protected]"; 
echo $hash = password_hash($password, PASSWORD_BCRYPT); 
if (password_verify($password, $hash)) { 
    echo 'Password is valid!'; 
} else { 
    echo 'Invalid password.'; 
} 
?> 

は常に有効なパスワードを示しています。あなたはそれがあなたの最初のコードブロックのために、この

echo $password = "Wrong Password"; 
echo $hash = password_hash("[email protected]", PASSWORD_BCRYPT); 

のような何か他のものであるようにそれを設定し、無効なパスワードを返すようにしたい場合は 、$パスワードを使用すると、データベースに格納ハッシュで、$ userPassは、ユーザーするパスワードですフォームに入力し、確認する必要があります。有効なパスワードかどうかを確認するコードは次のとおりです。

if (password_verify($userPass, $password)) { 
    echo "Correct Password"; 
} else { 
    echo "Invalid Password"; 
} 
+0

@Nguyenだからあなたつまり、$ userPassは、ユーザーがアプリケーションで入力したパスワードに対応します(たとえば、「Pass1234」は入力されたパスワードです)、データベースに格納されているハッシュ値である$ passwordフィールドとはどのように等しくなりますか?あなたが混乱しているとごめんなさい –

+0

$ userPassは、データベースに格納されている$ passwordフィールドと同じではありません。そのため、password_verify関数を使用して、ユーザー入力文字列($ userPass)がハッシュ文字列($ password)と比較して正しいパスワードであるかどうかを確認する必要があります。 –

関連する問題