个人设置界面增加修改密码模块
其他零散改进不多赘述
This commit is contained in:
parent
ae1ed4e1a0
commit
84b087362f
@ -32,6 +32,7 @@ class UserController extends Controller
|
||||
'class' => VerbFilter::className(),
|
||||
'actions' => [
|
||||
'delete' => ['POST'],
|
||||
'change-password' => ['POST'],
|
||||
],
|
||||
],
|
||||
]
|
||||
@ -323,7 +324,7 @@ class UserController extends Controller
|
||||
/**
|
||||
* @return string|Response
|
||||
*/
|
||||
public function actionInfo(): Response|string
|
||||
public function actionInfo(string $focus = null): Response|string
|
||||
{
|
||||
if (Yii::$app->user->isGuest) {
|
||||
Yii::$app->session->setFlash('error', '请先登录');
|
||||
@ -331,14 +332,19 @@ class UserController extends Controller
|
||||
}
|
||||
|
||||
$model = Yii::$app->user->identity;
|
||||
$dataDirectory = Yii::getAlias(Yii::$app->params['dataDirectory']) . '/' . Yii::$app->user->id;
|
||||
$usedSpace = FileSizeHelper::getDirectorySize($dataDirectory);
|
||||
$usedSpace = FileSizeHelper::getDirectorySize(Yii::getAlias(Yii::$app->params['dataDirectory']) . '/' . Yii::$app->user->id);
|
||||
$vaultUsedSpace = 0; // 保险箱已用空间,暂时为0
|
||||
$storageLimit = $model->storage_limit;
|
||||
if (Yii::$app->request->isPost && $model->load(Yii::$app->request->post())) {
|
||||
if ($model->save()) {
|
||||
Yii::$app->session->setFlash('success', '个人简介已更新');
|
||||
return $this->refresh();
|
||||
return $this->render('info', [
|
||||
'model' => $model,
|
||||
'usedSpace' => $usedSpace, // B
|
||||
'vaultUsedSpace' => $vaultUsedSpace, // B
|
||||
'storageLimit' => $storageLimit, // MB
|
||||
'focus' => 'bio',
|
||||
]);
|
||||
}
|
||||
}
|
||||
return $this->render('info', [
|
||||
@ -346,7 +352,31 @@ class UserController extends Controller
|
||||
'usedSpace' => $usedSpace, // B
|
||||
'vaultUsedSpace' => $vaultUsedSpace, // B
|
||||
'storageLimit' => $storageLimit, // MB
|
||||
'focus' => $focus,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Response|string
|
||||
* @throws Exception
|
||||
*/
|
||||
public function actionChangePassword(): Response|string
|
||||
{
|
||||
if (Yii::$app->user->isGuest) {
|
||||
return $this->goHome();
|
||||
}
|
||||
|
||||
$model = Yii::$app->user->identity;
|
||||
$model->scenario = 'changePassword';
|
||||
|
||||
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
|
||||
$model->password = Yii::$app->security->generatePasswordHash($model->newPassword);
|
||||
if ($model->save(false)) {
|
||||
Yii::$app->session->setFlash('success', 'Password changed successfully.');
|
||||
} else {
|
||||
Yii::$app->session->setFlash('error', 'Failed to change password.');
|
||||
}
|
||||
}
|
||||
return $this->redirect(['user/info', 'focus' => 'password']);
|
||||
}
|
||||
}
|
||||
|
@ -36,6 +36,10 @@ class User extends ActiveRecord implements IdentityInterface
|
||||
public $password2; // 重复密码
|
||||
public $rememberMe; // 记住我
|
||||
|
||||
public $oldPassword; // 旧密码 修改密码用
|
||||
public $newPassword; // 新密码 修改密码用
|
||||
public $newPasswordRepeat; // 重复新密码 修改密码用
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
@ -63,9 +67,28 @@ class User extends ActiveRecord implements IdentityInterface
|
||||
['email', 'email', 'on' => 'register'],
|
||||
['username', 'unique', 'on' => 'register'],
|
||||
['email', 'unique', 'on' => 'register'],
|
||||
[['oldPassword', 'newPassword', 'newPasswordRepeat'], 'required', 'on' => 'changePassword'],
|
||||
['oldPassword', 'validatePassword2', 'on' => 'changePassword'],
|
||||
['newPassword', 'string', 'min' => 6, 'max' => 24, 'on' => 'changePassword'],
|
||||
['newPasswordRepeat', 'compare', 'compareAttribute' => 'newPassword', 'on' => 'changePassword'],
|
||||
['newPassword', 'compare', 'compareAttribute' => 'oldPassword', 'operator' => '!=', 'message' => '新密码不能与旧密码相同', 'on' => 'changePassword'],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $attribute
|
||||
* @param $params
|
||||
* @return void
|
||||
*/
|
||||
public function validatePassword2($attribute, $params): void
|
||||
{
|
||||
if (!$this->hasErrors()) {
|
||||
if (!Yii::$app->security->validatePassword($this->$attribute, $this->password)) {
|
||||
$this->addError($attribute, '原密码不匹配');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
|
@ -8,10 +8,14 @@
|
||||
|
||||
/* @var $storageLimit int */
|
||||
|
||||
/* @var $focus string */
|
||||
|
||||
use app\assets\FontAwesomeAsset;
|
||||
use app\utils\FileSizeHelper;
|
||||
use app\utils\IPLocation;
|
||||
use yii\bootstrap5\ActiveForm;
|
||||
use yii\bootstrap5\Html;
|
||||
use yii\helpers\Url;
|
||||
|
||||
$this->title = '个人设置';
|
||||
FontAwesomeAsset::register($this);
|
||||
@ -75,8 +79,9 @@ $totalUsedPercent = min(($usedPercent + $vaultUsedPercent), 100); //总已用百
|
||||
<div class="accordion userAccordion" id="userAccordion">
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header" id="headingStorage">
|
||||
<button class="accordion-button" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#collapseStorage" aria-expanded="true">
|
||||
<button class="accordion-button <?= ($focus === 'storage' || $focus === null) ? '' : 'collapsed' ?>"
|
||||
type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#collapseStorage" <?= ($focus === 'storage' || $focus === null) ? 'aria-expanded="true"' : '' ?>>
|
||||
<span class="accordion-storage-content">
|
||||
<span>
|
||||
<i class="fa-solid fa-hard-drive"></i>
|
||||
@ -88,7 +93,8 @@ $totalUsedPercent = min(($usedPercent + $vaultUsedPercent), 100); //总已用百
|
||||
</span>
|
||||
</button>
|
||||
</h2>
|
||||
<div id="collapseStorage" class="accordion-collapse collapse show">
|
||||
<div id="collapseStorage"
|
||||
class="accordion-collapse collapse <?= ($focus === 'storage' || $focus === null) ? 'show' : '' ?>">
|
||||
<div class="accordion-body">
|
||||
<div class="storage-info">
|
||||
<div class="storage-columns">
|
||||
@ -135,13 +141,14 @@ $totalUsedPercent = min(($usedPercent + $vaultUsedPercent), 100); //总已用百
|
||||
</div>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header" id="headingBio">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#collapseBio">
|
||||
<button class="accordion-button <?= ($focus === 'bio') ? '' : 'collapsed' ?>" type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#collapseBio" <?= ($focus === 'bio') ? 'aria-expanded="true"' : '' ?>>
|
||||
<i class="fa-solid fa-address-card"></i>
|
||||
<span>个人简介</span>
|
||||
</button>
|
||||
</h2>
|
||||
<div id="collapseBio" class="accordion-collapse collapse">
|
||||
<div id="collapseBio" class="accordion-collapse collapse <?= ($focus === 'bio') ? 'show' : '' ?>">
|
||||
<div class="accordion-body">
|
||||
<?php $form = yii\widgets\ActiveForm::begin(); ?>
|
||||
<?= $form->field($model, 'bio')->textarea(['rows' => 6])->label('简介') ?>
|
||||
@ -154,27 +161,39 @@ $totalUsedPercent = min(($usedPercent + $vaultUsedPercent), 100); //总已用百
|
||||
</div>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header" id="headingPassword">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#collapsePassword">
|
||||
<button class="accordion-button <?= ($focus === 'password') ? '' : 'collapsed' ?>" type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#collapsePassword" <?= ($focus === 'password') ? 'aria-expanded="true"' : '' ?>>
|
||||
<i class="fa-solid fa-key"></i>
|
||||
<span>修改密码</span>
|
||||
</button>
|
||||
</h2>
|
||||
<div id="collapsePassword" class="accordion-collapse collapse">
|
||||
<div id="collapsePassword" class="accordion-collapse collapse <?= ($focus === 'password') ? 'show' : '' ?>">
|
||||
<div class="accordion-body">
|
||||
<!-- 修改密码表单相关内容 -->
|
||||
<?php $form = ActiveForm::begin([
|
||||
'action' => Url::to(['user/change-password']),
|
||||
'method' => 'post'
|
||||
]); ?>
|
||||
<?= $form->field($model, 'oldPassword')->passwordInput()->label('原密码') ?>
|
||||
<?= $form->field($model, 'newPassword')->passwordInput()->label('新密码') ?>
|
||||
<?= $form->field($model, 'newPasswordRepeat')->passwordInput()->label('重复新密码') ?>
|
||||
<div class="form-group">
|
||||
<?= Html::submitButton('保存', ['class' => 'btn btn-success']) ?>
|
||||
</div>
|
||||
<?php ActiveForm::end(); ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="accordion-item">
|
||||
<h2 class="accordion-header" id="headingAdvanced">
|
||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
|
||||
data-bs-target="#collapseAdvanced">
|
||||
<button class="accordion-button <?= ($focus === 'advanced') ? '' : 'collapsed' ?>" type="button"
|
||||
data-bs-toggle="collapse"
|
||||
data-bs-target="#collapseAdvanced" <?= ($focus === 'advanced') ? 'aria-expanded="true"' : '' ?>>
|
||||
<i class="fa-solid fa-flask"></i>
|
||||
<span>高级选项</span>
|
||||
</button>
|
||||
</h2>
|
||||
<div id="collapseAdvanced" class="accordion-collapse collapse">
|
||||
<div id="collapseAdvanced" class="accordion-collapse collapse <?= ($focus === 'advanced') ? 'show' : '' ?>">
|
||||
<div class="accordion-body">
|
||||
<!-- 高级选项相关内容 -->
|
||||
</div>
|
||||
|
Loading…
Reference in New Issue
Block a user