首页 > 解决方案 > 通过回答安全问题手动重置密码 - Laravel

问题描述

我想通过回答一些安全问题来实现本地忘记密码的功能,用户可以在不通过电子邮件发送重置链接的情况下重置他/她的密码。在这里,我尝试了以下代码,在 updatePassword.blade.php 中,电子邮件、密码和密码确认验证不起作用,因此当我将不在数据库中的电子邮件地址或当我输入时,我在 UserControler 中实现它将未匹配的密码放入密码和密码确认输入中会引发以下错误,但是如果我将正确的电子邮件和密码以及匹配的密码放入密码和密码确认输入中,它会重置我的密码,我不会知道什么是错的。

任何形式的帮助将不胜感激。

ErrorException (E_ERROR) 试图获取非对象的属性(查看:C:\xampp\htdocs\Bookstore\resources\views\layouts\layout.blade.php)(查看:C:\xampp\htdocs\Bookstore\resources\视图\布局\layout.blade.php)

这是 web.php 中的路由

Route::get('getview', [
    'uses' => 'HomeController@getview',
    'as' => 'check.getview'
]);
Route::post('chekQuestions', [
    'uses' => 'HomeController@chekQuestions',
    'as' => 'check.question'
]);

Route::post('updagePassword', [
    'uses' => 'HomeController@updagePassword',
    'as' => 'update.question'
]);

这是控制器中的代码

  public function getview()
    {
        return view('auth.test');
    }

    public function chekQuestions(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|string|email',
            'answerQuestionOne' => 'required',
            'answerQuestionTwo' => 'required'
        ]);
        $user = User::first();

        if ($user->email != $request->email) {
            return redirect()
                ->back()
                ->with(Session::flash('message', 'دا ایمل شتون نلری'))

                ->withInput();
        }
        if ($user->answerQuestionOne != $request->answerQuestionOne) {
            return redirect()
                ->back()
                ->with(Session::flash('message2', 'ځواب مو مطابقت نلری'))

                ->withInput();
        }
        if ($user->answerQuestionTwo != $request->answerQuestionTwo) {
            return redirect()
                ->back()
                ->with(Session::flash('message3', 'ځواب مو مطابقت نلری'))

                ->withInput();
        }
        return view('auth.updatePassword',compact('user'));
    }
    public function updagePassword(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|string|email',
            'password' => 'required|confirmed|min:8'
        ]);
        $user = User::first();
        if ($user->email != $request->email) {
            return redirect()
                ->back()
                ->with(Session::flash('message', 'دا ایمل شتون نلری'))
                ->withInput();
        } elseif ($request->password_confirmation != $request->password) {
            return redirect()
                ->back()
                ->with(Session::flash('message2', 'دا ایمل شتون نلری'))
                ->withInput();
        } else {
            $user->where('email', $request->email)->update([
                'password' => Hash::make($request->password)
            ]);
            return redirect()->route('login');
        }
    }

这是指向测试视图的链接

<a style="font-size: 15px;" href="{{route('check.getview')}}" class="to_register">د پټ نو بیا راګرځول د امنتی پوښتنو له لاری </a>

这里测试视图

<div class="x_content">
                        <br>
                             <form method="POST" action="{{route('check.question')}}" class="form-horizontal form-label-left">
                        @csrf


                            <div class="form-group">

                                <label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">ایمل
                                    <span class="required">*</span>
                                </label>
                                <div class="col-md-6 col-sm-6 col-xs-12">
                                   <input id="email" type="email" placeholder=" ایمل" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus>
      @if(Session::has('message'))
                           <p  class="bg-danger">{{session('message')}} </p>

                         @endif
                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                                </div>
                            </div>
                            <div class="form-group">

                                <label class="control-label col-md-3 col-sm-3 col-xs-12" for="last-name">
                                    لومړۍ امنیتي پوښتنه <span class="required">*</span>
                                </label>
                                <div class="col-md-6 col-sm-6 col-xs-12">
                                   <input id="answerQuestionOne" placeholder="لومړۍ امنیتي پوښتنه" type="text"   class="form-control @error('answerQuestionOne') is-invalid @enderror" name="answerQuestionOne" value="{{ old('answerQuestionOne') }}" required autocomplete="answerQuestionOne" autofocus>
   @if(Session::has('message2'))
                           <p  class="bg-danger">{{session('message2')}} </p>

                         @endif
                                @error('answerQuestionOne')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror </div>
                            </div>
                            <div class="form-group">

                                <label for="middle-name" class="control-label col-md-3 col-sm-3 col-xs-12">
                                    دوهمه امنیتي پوښتنه </label>
                                <div class="col-md-6 col-sm-6 col-xs-12">
                                   <input id="answerQuestionTwo" placeholder="دوهمه امنیتي پوښتنه " type="text" class="form-control @error('answerQuestionTwo') is-invalid @enderror" name="answerQuestionTwo" value="{{ old('answerQuestionTwo') }}" required autocomplete="answerQuestionTwo" autofocus>
    @if(Session::has('message3'))
                           <p  class="bg-danger">{{session('message3')}} </p>

                         @endif
                                @error('answerQuestionTwo')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror </div>
                            </div>

                            <div class="ln_solid"></div>
                            <div class="form-group">
                                <div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
                                    {{-- <button type="submit" class="btn btn-primary">انصراف</button> --}}
                                    <button type="submit" class="btn btn-success">خوندی کړی</button>
                                </div>
                            </div>

                        </form>
                    </div>

这是 updatePassword.blade.php

   <div class="x_content">

                        <br>
                             <form method="POST" action="{{route('update.question')}}" class="form-horizontal form-label-left">
                        @csrf


                            <div class="form-group">
                                <label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">ایمل
                                    <span class="required">*</span>
                                </label>
                                <div class="col-md-6 col-sm-6 col-xs-12">
                                    {{-- @foreach ($user as $getemail) --}}

                                    {{-- value="{{ old('email') }}" --}}
                                   <input id="email" type="email" placeholder=" ایمل" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ $user->email }}" required autocomplete="email" autofocus>
                                 {{-- @endforeach --}}
                                   @if(Session::has('message'))
                           <p  class="bg-danger">{{session('message')}} </p>

                         @endif
                                @error('email')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                                </div>
                            </div>

                            <div class="form-group">
                              <label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">پټ نوم
                                    <span class="required">*</span>
                                </label>
                                <div class="col-md-6 col-sm-6 col-xs-12">
                                <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="new-password">
 @if(Session::has('message2'))
                           <p  class="bg-danger">{{session('message2')}} </p>

                         @endif
                                @error('password')
                                    <span class="invalid-feedback" role="alert">
                                        <strong>{{ $message }}</strong>
                                    </span>
                                @enderror
                            </div>
                            </div>
                              <div class="form-group">
                                 <label class="control-label col-md-3 col-sm-3 col-xs-12" for="first-name">پټ تأیید
                                    <span class="required">*</span>
                                </label>
                                <div class="col-md-6 col-sm-6 col-xs-12">
                                    {{-- <input id="passwordconfirm" type="password" class="form-control" name="passwordconfirm" required autocomplete="new-password">
                          --}}
                            <input id="password-confirm" type="password" placeholder="دپټنوم تأیید "  class="form-control" name="password_confirmation" required autocomplete="new-password">
                 @if(Session::has('message3'))
                           <p  class="bg-danger">{{session('message3')}} </p>

                         @endif
                                 </div>
                            </div>

                            <div class="ln_solid"></div>
                            <div class="form-group">
                                <div class="col-md-6 col-sm-6 col-xs-12 col-md-offset-3">
                                    {{-- <button type="submit" class="btn btn-primary">انصراف</button> --}}
                                    <button type="submit" class="btn btn-success">خوندی کړی</button>
                                </div>
                            </div>

                        </form>
                    </div>

标签: laravel

解决方案


尝试这个

$this->validate($request, [
    'email' => 'required|string|email',
    'password' => 'required|min:6',
    'password_confirmation' => 'required|same:password'
 ]);

推荐阅读