簡體   English   中英

在 Laravel 8 中存儲數據后如何保持會話?

[英]How to keep session after storing data in Laravel 8?

我是 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>

任何建議都會真正有幫助。 謝謝。

更新密碼后再次驗證用戶

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.'
   ]);
   if(Auth::attempt(['email'=>$user->email, 'password'=>$this->newPassword])){
       $request->session()->regenerate();    
       return redirect()->intended('user.changepassword');
   }
} else {
   $this->emit('showAlertError', [
       'msg' => 'Old password does not match.'
   ]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM