laravel - 通过回答安全问题手动重置密码 - 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>
解决方案
尝试这个
$this->validate($request, [
'email' => 'required|string|email',
'password' => 'required|min:6',
'password_confirmation' => 'required|same:password'
]);
推荐阅读
- python-3.x - 如何修复非可迭代套接字对象的类型错误
- ios - 当我从基类以编程方式替换 UIViewController 的根 UIView 时,我的 Outlets 为零
- r - 子集 data.frame 与 data.table
- powershell - Powershell - 命令在界面中有效,但不在脚本中
- javascript - 跨域读取阻塞 (CORB) 问题是准确的,即使我使用 JSONP
- javascript - Jinja - 将元素转换为字符串并调用 JS 函数
- node.js - 使用谷歌云功能将令牌转移给用户
- c++ - 即使没有明确包含在任何文件中,也强制静态类成员初始化
- spring-boot - MQRC_CLIENT_CONN_ERROR 与 IBM MQ 在 Docker 中使用 CCDT + Spring Boot
- php - 返回 Google Place Photos 时出现“格式错误的 UTF-8 字符,可能编码不正确”错误