国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - 示例詳解Laravel重置密碼代碼重構

示例詳解Laravel重置密碼代碼重構

2021-02-22 15:21Dennis`s blog PHP教程

假如需要使用laravel搭建一個后臺內容管理系統,但laravel默認的登陸注冊不能滿足目前的需求,重置密碼的話因為是用在后臺,并且不需要發送郵件進行重置,所以默認的重置密碼肯定是不行的。下面我們一起來看看如何進行Larav

1、首先確定重置密碼的路由

我們在安裝好laravel的時候默認生成的重置密碼是在用戶未登錄的情況下進行的。所以使用原來的控制器是不可行的,并且原有的重置密碼,并不需要查看原始密碼是否正確,而是通過郵件來進行直接更改密碼,所以控制器方法的話,我們也需要重新寫個。我們使用php artisan make:controller UserController創建一個控制器類,然后創建兩條路由Route::get('reset', 'UserController@getReset')Route::post('reset', 'UserController@postReset')

前者是顯示一個重置密碼的頁面get請求,后面是重置密碼post請求。

2、顯示重置密碼頁

這個使用的是getReset這個方法,這個方法只需要顯示一個視圖所以并沒有特別的邏輯

?
1
2
3
4
public function getReset()
{
  return view('auth.reset');
}

3、請求重置密碼

這個使用的是postReset這個方法,接收數據的話我們使用兩種方法接收傳過來的數據都可以:一種是使用request的方法接收數據,另外一種是使用Input::get的方法獲取數據。Request的話需要引入use Illuminate\Http\Request類,Input的話需要引入use Input類,這里我們選擇使用request來接收。

4、驗證規則

驗證的話,laravel為我們提供了一套驗證的規則,使用validatorValidator::make()方法進行驗證

?
1
2
3
4
5
6
7
8
9
10
11
$data = $request->all(); //接收所有的數據
$rules = [
  'oldpassword'=>'required|between:6,20',
  'password'=>'required|between:6,20|confirmed',
];
$messages = [
  'required' => '密碼不能為空',
  'between' => '密碼必須是6~20位之間',
  'confirmed' => '新密碼和確認密碼不匹配'
];
$validator = Validator::make($data, $rules, $messages);

$data 接收到從from傳過來的數據信息;

rules 對接收到的值進行判斷,其中數組前面的oldpasswordpassword是從前端from接收到的原始密碼和新密碼的name字段數據進行驗證;

驗證規則的話在手冊的驗證章節都有,值得注意的是,使用confirmed的話是為了新密碼和確認密碼進行相同判斷,確認密碼必須的name值必須是新密碼的name值后面加上'_confirmation',比如新密碼的name值為newpassword的話,確認密碼的name值則必須為newpassword_confirmation才可以進行判斷messages對驗證的數據請求,顯示什么提示。

然后通過上面的驗證,還有個情況是沒有驗證的,那就是輸入的原始密碼是否和數據庫里的原始密碼相同。

這里我們可以先把這個用戶的信息從數據庫里給查出來,然后和輸入的原始密碼進行比對。這里我們使用Auth::user()來獲取用戶的信息,這個方法需要引入use Auth;類,然后通過Hash::check()來進行密碼判斷。判斷完以后還有個問題,那就是,如何把錯誤信息給壓入到validator的錯誤信息里,這里laravel為我們提供了after方法:

?
1
2
3
4
5
6
7
8
9
10
11
$user = Auth::user();
$validator->after(function($validator) use ($oldpassword, $user) {
  if (!\Hash::check($oldpassword, $user->password)) { //原始密碼和數據庫里的密碼進行比對
    $validator->errors()->add('oldpassword', '原密碼錯誤'); //錯誤的話顯示原始密碼錯誤
  }
});
if ($validator->fails()) {   //判斷是否有錯誤
  return back()->withErrors($validator); //重定向頁面,并把錯誤信息存入一次性session里
}
$user->password = bcrypt($password);    //使用bcrypt函數進行新密碼加密
$user->save();   //成功后,保存新密碼

這里因為after 引入了一個PHP的匿名函數,所以我們需要使用use 關鍵字把外部數據給傳入到匿名函數里(PS:php新特性,閉包和匿名函數)

在匿名函數里我們引入了一個全局函數所以我們需要在函數前面加\(PS:php新特性,命名空間章節,全局命名空間)

5、前端顯示錯誤信息

前端顯示的話,我們使用$errors變量來顯示錯誤,根據官方文檔說明,調用的是Illuminate\Support\MessageBag的示例,有興趣的話,可以看下。我們使用count($errors) > 0來判斷是否有錯誤,使用 $errors->first()顯示一條錯誤信息:

?
1
2
3
4
5
6
@if(count($errors) > 0)
  <div class="alert alert-danger display-hide" style="display: block;">
    <button class="close" data-close="alert"></button>
    <span>  </span>
  </div>
@endif

可能會有人問,如果我的錯誤不是顯示在固定的一個地方,而是在每個表單的后面顯示錯誤信息的話,這樣我們該怎么判斷和顯示呢? 答案是使用$errors->has('oldpassword')來判斷有沒有這個名稱的錯誤,如果有的話,使用 $errors->first('oldpassword') 顯示這條錯誤:

?
1
2
3
4
5
6
@if( $errors->has('oldpassword') )
  <div class="alert alert-danger display-hide" style="display: block;">
    <button class="close" data-close="alert"></button>
    <span>  </span>
  </div>
@endif

其中oldpassword是每個表單的里的name值,所以在使用after方法添加自定義錯誤的時候 $validator->errors()->add('oldpassword', '原密碼錯誤');中,oldpassword一定要寫對是在哪個表單的錯誤,這樣才能正確的顯示。

6、完成后的示例

UserController

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public function getReset()
{
  return view('auth.reset');
}
 
public function postReset(Request $request)
{
  $oldpassword = $request->input('oldpassword');
  $password = $request->input('password');
  $data = $request->all();
  $rules = [
    'oldpassword'=>'required|between:6,20',
    'password'=>'required|between:6,20|confirmed',
  ];
  $messages = [
    'required' => '密碼不能為空',
    'between' => '密碼必須是6~20位之間',
    'confirmed' => '新密碼和確認密碼不匹配'
  ];
  $validator = Validator::make($data, $rules, $messages);
  $user = Auth::user();
  $validator->after(function($validator) use ($oldpassword, $user) {
    if (!\Hash::check($oldpassword, $user->password)) {
      $validator->errors()->add('oldpassword', '原密碼錯誤');
    }
  });
  if ($validator->fails()) {
    return back()->withErrors($validator); //返回一次性錯誤
  }
  $user->password = bcrypt($password);
  $user->save();
  Auth::logout(); //更改完這次密碼后,退出這個用戶
  return redirect('/login');
}

reset.blade

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<form class="login-form" action="" method="post">
    <h3 class="font-green">修改密碼</h3>
    @if($errors->first())
      <div class="alert alert-danger display-hide" style="display: block;">
        <button class="close" data-close="alert"></button>
        <span>  </span>
      </div>
    @endif
    {!! csrf_field() !!}
 
    <div class="form-group">
      <label class="control-label visible-ie8 visible-ie9">原始密碼</label>
      <input class="form-control placeholder-no-fix" type="password" autocomplete="off" placeholder="Old Password" name="oldpassword"> </div>
    <div class="form-group">
      <label class="control-label visible-ie8 visible-ie9">新密碼</label>
      <input class="form-control placeholder-no-fix" type="password" autocomplete="off" id="register_password" placeholder="New password" name="password"> </div>
    <div class="form-group">
      <label class="control-label visible-ie8 visible-ie9">重復密碼</label>
      <input class="form-control placeholder-no-fix" type="password" autocomplete="off" placeholder="Repeat password" name="password_confirmation"> </div>
    <div class="form-actions">
      <button type="submit" id="register-submit-btn" class="btn btn-success uppercase pull-right">確定</button>
    </div>
  </form>

總結

以上就是本文的全部內容,希望對大家學習使用Laravel有所幫助,如果有疑問的話歡迎留言討論。

原文:Dennis`s blog

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: av色伊人久久综合一区二区 | 亚洲精品日韩激情在线电影 | av中文字幕在线播放 | 日韩一区二区在线播放 | 国产精品免费av | 自拍 亚洲 欧美 老师 丝袜 | 日韩欧美精品在线 | 亚洲成人av免费看 | 黑人中文字幕一区二区三区 | 国产精品久久久久久福利一牛影视 | 亚洲综合精品 | 亚洲一区二区三区四区的 | 伊人av成人 | 欧美一区二区三区免费 | 欧美日韩第一页 | 日韩在线视频观看 | 亚洲国产精品久久久久久久 | 亚洲欧美另类久久久精品2019 | 日韩精品一区二区三区四区 | 日日爱视频 | 91.成人天堂一区 | 日韩精品一 | 国产伦乱 | 男女xx网站| 日韩国产一区二区三区 | 欧美色综合天天久久综合精品 | 99热手机在线观看 | 国产一区不卡 | h视频在线免费观看 | 成年人在线观看 | 色视频在线免费观看 | 91在线网址| 久久久久综合狠狠综合日本高清 | 精品视频在线观看 | 99久久精品免费看国产一区二区三区 | 国产精品午夜在线观看 | 久久se精品一区精品二区 | 国产亚洲一区二区三区 | 久久99国产精品免费网站 | 在线电影亚洲 | 欧美日韩三区 |