0

YiiPassword拡張機能を抽出しましたprotected/components/YiiPassword

main.php:

    .
    .
    .
    'import'=>array(
            'application.models.*',
            'application.components.*',
            'application.components.YiiPassword.*',
            'application.helpers.*',

    ),
    .
    .
    .

User.php: (モデル)

.    
.
.
public function behaviors()
{
    return array(
        "APasswordBehavior" => array(
            "class" => "APasswordBehavior",
            "defaultStrategyName" => "bcrypt",
            "strategies" => array(
                "bcrypt" => array(
                    "class" => "ABcryptPasswordStrategy",
                    "workFactor" => 14
                ),
                "legacy" => array(
                    "class" => "ALegacyMd5PasswordStrategy",
                )
            ),
        )
    );
}
.
.
.

Ans はまた、これらの 3 つのフィールドをtbl_userに追加しました。

salt - パスワードのハッシュに使用されるユーザーごとのソルトを保持します

password - ハッシュされたパスワードを保持します(既に存在します)

passwordStrategy - このユーザーの現在のパスワード戦略の名前を保持します

requiresNewPassword - ユーザーがパスワードを変更する必要があるかどうかを決定するブール値フィールド

そして今、私はbcryptのみを使用したいのですが、ユーザーパスワードをエンコードしてユーザーログイン時に確認する方法は?

4

2 に答える 2

1

ユーザーを取得してverifyPasswordメソッドを呼び出すだけです。このメソッドの説明:

指定されたパスワードを、このモデルに保存されているパスワードと比較します

したがって、次のようなことができます。

$user = User::model()->findByPK(1);
if($user->verifyPassword("password")){
    //Password verified
}
于 2013-03-30T09:20:19.227 に答える
0

解決した

次のテストは正常に完了しました。ABcryptPasswordStrategyTest.php :

<?php
Yii::import("application.components.passwordStrategy.*");
Yii::import("application.models.*");

/**
 * Tests for the {@link ABcryptPasswordStrategy} class.
 * @author Charles Pick
 * @package packages.passwordStrategy
 */
class ABcryptPasswordStrategyTest extends CTestCase
{
    public function testEncode()
    {
        $user=User::model()->findByAttributes(array('username'=>'user'));
        $strategy = new ABcryptPasswordStrategy();
        $strategy->getSalt(true);

        $user->password = 'pass';
        $user->save();

        $this->assertTrue($user->verifyPassword("pass"));
    }
}

より詳しい情報

于 2013-03-31T08:08:43.487 に答える