ホームページ > バックエンド開発 > PHPチュートリアル > Yii2用户密码加密后验证问题

Yii2用户密码加密后验证问题

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-06-06 20:20:23
オリジナル
1437 人が閲覧しました

使用Yii2框架,密码字段为pass,rules中设定的pass长度范围为6-20;

原密码为123456789,校验通过没有问题,hash后存入数据库,hash后的值肯定超过范围了。

此时pass字段值为hash后的值,没有保存原密码,不可逆加密。

当我更新用户数据的时候

$userInfo = User::findOne(['id'=>1]);
$userInfo->last_time = time();
//这个时候就会报错,因为密码长度不符合要求
$userInfo->save(true);
ログイン後にコピー
ログイン後にコピー

该如何解决这个问题?

现在暂时做的就是修改rules范围,但是这样用户原密码长度的限制条件也跟着修改了。有没有更好的解决方案?

回复内容:

使用Yii2框架,密码字段为pass,rules中设定的pass长度范围为6-20;

原密码为123456789,校验通过没有问题,hash后存入数据库,hash后的值肯定超过范围了。

此时pass字段值为hash后的值,没有保存原密码,不可逆加密。

当我更新用户数据的时候

$userInfo = User::findOne(['id'=>1]);
$userInfo->last_time = time();
//这个时候就会报错,因为密码长度不符合要求
$userInfo->save(true);
ログイン後にコピー
ログイン後にコピー

该如何解决这个问题?

现在暂时做的就是修改rules范围,但是这样用户原密码长度的限制条件也跟着修改了。有没有更好的解决方案?

可以把从 model::scenarios() 里定义的 self::SCENARIO_DEFAULT 的值中去掉 password,
从而在default-scenario下不再验证password

如果你是用的YII2 advanced的话,你可以看下它默认的用户模型和默认的migration

用户模型里的password字段已经是被定义过了,你无需再次定义。

你把你的password字段改为password_hash,保存的时候禁止前端展示和发送password_hash(这个可以在rule控制)并把password这个字段带过来,如果password不为空,则在更新用户信息前执行$user->setPassword(Yii::$app->request->post('password'))即可(或者写在用户模型的beforeSave方法里也行)

関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
PHP 拡張子 intl
から 1970-01-01 08:00:00
0
0
0
phpのデータ取得?
から 1970-01-01 08:00:00
0
0
0
PHP GET エラー レポート
から 1970-01-01 08:00:00
0
0
0
phpを上手に学ぶ方法
から 1970-01-01 08:00:00
0
0
0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート