【发布时间】:2021-12-21 19:35:06
【问题描述】:
我是 Laravel 的新手。我使用 Livewire 在 Laravel 8 中创建了自定义更改密码。但是,在成功更新用户密码后,我的会话已过期并重定向到登录页面。那么,问题是如何让会话保持活跃并重定向到当前页面?
这是我的代码:
更改用户密码.php
class ChangeUserPassword extends Component
{
public $oldPassword;
public $newPassword;
public $confirmPassword;
public function render()
{
return view('livewire.auth.change-user-password');
}
public function changePassword()
{
$this->validate([
'oldPassword' => 'required',
'newPassword' => ['required', Password::min(8)
->letters()
->mixedCase()
->numbers()
->symbols()
// ->uncompromised()
],
'confirmPassword' => 'required|min:8|same:newPassword'
]);
$user = User::find(auth()->user()->id);
if (Hash::check($this->oldPassword, $user->password)) {
$user->update([
'password' => Hash::make($this->newPassword),
'updated_at' => Carbon::now()->toDateTimeString()
]);
$this->emit('showAlert', [
'msg' => 'Your password has been successfully changed.'
]);
return redirect()->route('user.changepassword');
} else {
$this->emit('showAlertError', [
'msg' => 'Old password does not match.'
]);
}
}
}
更改用户密码.blade.php
<div class="col-md-12">
<div class="card">
<div class="card-body">
<h4 class="card-title ml-2">Change Password</h4>
<form wire:submit.prevent="changePassword" role="form">
@csrf
<div class="row">
<div class="form-group col-md-4">
<label for="oldPassword" class="form-label">Old Password<span style="color: red"> *</span></label>
<input class="form-control @error('oldPassword') is-invalid @enderror" wire:model="oldPassword" name="oldPassword" id="oldPassword" type="password" />
@error('oldPassword')
<small id="helpId" class="text-danger">{{ $message }}</small>
@enderror
</div>
<div class="form-group col-md-4">
<label for="newPassword" class="form-label">New Password<span style="color: red"> *</span></label>
<input class="form-control @error('newPassword') is-invalid @enderror" wire:model="newPassword" name="newPassword" id="newPassword" type="password" />
@error('newPassword')
<small id="helpId" class="text-danger">{{ $message }}</small>
@enderror
</div>
<div class="form-group col-md-4">
<label for="confirmPassword" class="form-label">Confirm Password<span style="color: red"> *</span></label>
<input class="form-control @error('confirmPassword') is-invalid @enderror" wire:model="confirmPassword" name="confirmPassword" id="confirmPassword" type="password" />
@error('confirmPassword')
<small id="helpId" class="text-danger">{{ $message }}</small>
@enderror
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary pull-right"
wire:loading.attr="disabled">Save</button>
{{-- <div wire:loading>
<img style="width: 25px;" src="{{ asset('assets/images/spinner-small.gif') }}" alt="Loading">
</div> --}}
</div>
</div>
</form>
</div>
</div>
</div>
<script>
document.addEventListener('livewire:load', function (e) {
e.preventDefault()
})
</script>
任何建议都会有帮助。谢谢。
【问题讨论】:
-
"user.changepassword" 在这个函数中是否定义了任何登录路由,因为它将重定向到登录路由
-
@RushikeshGanesh 不太清楚你的意思,但这是路线定义
Route::get('/user/change-password', ChangeUserPassword::class)->name('user.changepassword') -
@RushikeshGanesh 哪个功能?我没有名为“user.changepassword”的函数,而是路由命名
标签: php laravel laravel-8 laravel-livewire