【问题标题】:Reset password manually by answering the security questions - Laravel通过回答安全问题手动重置密码 - Laravel
【发布时间】:2020-04-02 07:14:36
【问题描述】:

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

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

ErrorException (E_ERROR) 试图获取非对象的属性(查看: C:\xampp\htdocs\Bookstore\resources\views\layouts\layout.blade.php) (看法: C:\xampp\htdocs\Bookstore\resources\views\layouts\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>

【问题讨论】:

  • 错误告诉您,您正在尝试打印不存在的对象的某些属性(对象或属性)。所以问题将是在某些视图中使用未知变量/变量属性。
  • 我正在尝试在 layout.blade.php 中显示 Auth->user 这是问题所在,但如果有简单安全的方法,为什么它不显示验证,请建议
  • 首先进行 auth()->check()。它会告诉您,如果用户已登录。如果是,则打印 Auth->user

标签: laravel


【解决方案1】:

试试这个

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

【讨论】:

    【解决方案2】:

    我通过手动设置验证消息找到了解决方案

    控制器中的代码

    public function getview(Request $request)
    {
        $user=new User();
          $anserone= $request->answerQuestionOne;
          $anstwo = $request->answerQuestionTwo;
          return view('auth.question',compact('user','anserone','anstwo'));
    }
    
    public function chekQuestions(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|string|email',
            'answerQuestionOne' => 'required',
            'answerQuestionTwo' => 'required'
        ]);
    
        $user = User::where('email', $request->email)->first();
    
        if ( $user == null) {
            //
            $user=new User();
            $user->email= $request->email;
            $anserone= $request->answerQuestionOne;
             $anstwo = $request->answerQuestionTwo;
            Session::flash('message', 'دا ایمل شتون نلری');
            return view('auth.question',compact('user','anserone','anstwo'));
    
        }
           if ( $user->answerQuestionOne == null || $user->answerQuestionTwo == null) {
            //
            $user=new User();
            $user->email= $request->email;
            $anserone= $request->answerQuestionOne;
             $anstwo = $request->answerQuestionTwo;
    
            Session::flash('message4', 'هیڅ مورد نشته، لمړی تاسی خپل امنیتی ځوابونه خوندی کړی');
            return view('auth.question',compact('user','anserone','anstwo'));
    
        }
           if ($user->answerQuestionOne != $request->answerQuestionOne) {
                $anserone= $request->answerQuestionOne;
                $anstwo = $request->answerQuestionTwo;
                Session::flash('message2', 'دپښتنو ځوابونه مو ناسم وو');
                return view('auth.question',compact('user','anserone','anstwo'));
        }
          if ( $user->answerQuestionTwo != $request->answerQuestionTwo) {
              $anstwo = $request->answerQuestionTwo;
              $anserone= $request->answerQuestionOne;
    
            Session::flash('message3', 'دپښتنو ځوابونه مو ناسم وو');
                return view('auth.question',compact('user','anstwo','anserone'));
        }
    
        return view('auth.updatePassword',compact('user'));
    }
    public function updagePassword(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|string|email',
            'password' => 'required|min:8'
        ]);
        // $user = User::first();
        $user = User::where('email', $request->email)->first();
        if ( $user == null) {
            //
            $user=new User();
            $user->email= $request->email;
            // $anserone= $request->answerQuestionOne;
            //  $anstwo = $request->answerQuestionTwo;
            Session::flash('message', 'دا ایمل شتون نلری');
                 return view('auth.updatePassword',compact('user'));
    
        }
    
         if ($request->password_confirmation != $request->password) {
                Session::flash('message3', 'پټ نوم مطابقت نلری');
                 return view('auth.updatePassword',compact('user'));
        } 
    
             $user->where('email', $request->email)->update([
                'password' => Hash::make($request->password)
            ]);
            return redirect()->route('login');
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2011-01-10
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 2014-07-20
      相关资源
      最近更新 更多