3

Yiiでphpass認証を実装しようとしていますが、毎回失敗します。私は多くのSO記事を読んでいて、まだ解決策を見つけていないので、これはYii固有の問題であるに違いないと思います。

User.phpで、ハッシュ化されたパスワードを保存しています。

public function beforeSave() {
    $phpass = new PasswordHash(8, false);
    $hash = $phpass->HashPassword($this->user_pass);
    $this->user_pass = $hash;
    return true;
}

UserIdentityで、パスワードを確認しています。

public static function isPasswordValid($plainPass, $hashedPass) {
    $phpass = new PasswordHash(8, false);
    $isValid = $phpass->CheckPassword($plainPass, $hashedPass);


    if($isValid){
        return true;
    }

    return false;
}

$hashedPassはデータベースから出てきます。plainPassこれは、ユーザーがフォームに入力したばかりですが、$isValid常にfalseを返します。実際、ハッシュ化されたパスワードをデータベースから引き出し、手動で適用しましたが、それでも失敗します。

$isValid = $phpass->CheckPassword('password', '$2a$08$P9X8duz7S8LOysz1XIn3fe/YYW3dwAs2busSBIX/QnZhKH/R9/H1S')

ハッシュされたパスワードが挿入時にデータベースで切り捨てられていないことを確認しましたが、そうではありません...varchar 60別のSOの記事に従って、パスワードフィールドを調整しましたが、役に立ちませんでした...

編集:手動でハッシュをデータベースフィールドに貼り付けると、認証は次の方法で生成された後に機能するようです:

echo $phpass->HashPassword('password');
4

1 に答える 1

3

問題はbeforeSaveにある可能性があります。ユーザーを保存するuser_pass たびにハッシュします。ユーザーを2回保存すると、パスワードが2回ハッシュされるため、役に立たなくなります。

私は問題なくyiiでphpassを使用していますが、ユーザーが手動で設定した場合にのみパスワードをハッシュします。

ユーザーがパスワードを変更/設定した場合にのみ、パスワードをハッシュしてみてください。

于 2013-02-05T17:44:09.650 に答える