Laravel Resetting Password instances

Source: Internet
Author: User
If you need to use Laravel to build a back-end content management system, but laravel default login registration can not meet the current needs, reset password because it is used in the background, and do not need to send a message to reset, so the default reset password is definitely not. Follow this article to see how to perform a laravel reset password refactoring.

1. First determine the route to reset the password

When we install the Laravel, the default reset password is generated when the user is not logged in. So using the original controller is not feasible, and the original reset password, do not need to see the original password is correct, but through the mail to make a direct change of password, so the controller method, we also need to write again. We used php artisan make:controller UserController to create a controller class and then create two routes Route::get('reset', 'UserController@getReset') and Route::post('reset', 'UserController@postReset') .

The former is a page get request that displays a reset password, followed by a reset password post request.

2. Display the Reset Password page

This method is used getReset , this method only needs to display a view, so there is no special logic


Public Function Getreset () {  return view (' Auth.reset ');}

3. Request password Reset

This is the method used to postReset receive the data, we use two methods to receive the data transmitted: One is to use the request method to receive data , the other is to use the Input::get method to obtain data . RequestIf you need to introduce use Illuminate\Http\Request classes, Input you need to introduce use Input classes, and here we choose request to use them to receive.

4. Validation rules

Validation, Laravel provides us with a set of validation rules that are validated using validator the Validator::make() method

$data = $request->all (); Receive all data $rules = [  ' oldpassword ' = ' required|between:6,20 ',  ' password ' = ' required|between:6,20| ' Confirmed ',]; $messages = [  ' Required ' = ' password cannot be null ',  ' between ' = ' password must be between 6~20 bits ',  ' confirmed ' = > ' New password and confirmation password do not match '; $validator = Validator::make ($data, $rules, $messages);

$data Receiving the data from the from;

rulesThe value of the docking received is judged, where the preceding array oldpassword and the password Name field data from the original and new password received from the front end are validated;

Validation rules are in the manual validation section, it is worth noting that the use of confirmed is for the new password and confirm the password for the same judgment, the confirmation password must be the name value must be the new password after the name value, _confirmation' such as the name value of the new password, newpassword The name value of the confirmation password must be for the newpassword_confirmation data request to be judged for messages validation and what prompt is displayed.

Then through the above verification, there is another case is not verified, that is, the original password entered is the same as the original password in the database.

Here we can first the user's information from the database to find out, and then the input of the original password to compare. Here we use Auth::user() to get the user's information, this method needs to introduce the use Auth; class, and then through Hash::check() the password to judge. After judging, there is a problem, that is, how to press the error message into the validator error message, here Laravel provides us with after method:

$user = Auth::user (); $validator->after (function ($validator) use ($oldpassword, $user) {  if (!\hash::check ($ OldPassword, $user->password)) {//original password and password in database    $validator->errors ()->add (' OldPassword ', ' original password error ') ; Incorrect display of the original password error  }}); if ($validator->fails ()) {   //To determine if there is an error  return back ()->witherrors ($validator); /redirect the page and save the error message in a single session} $user->password = Bcrypt ($password);    Use the Bcrypt function to encrypt the new password $user->save ();   After success, save the new password

Because after of the introduction of an anonymous PHP function, we need to use the keyword to pass the use external data to the anonymous function (ps:php new features, closures and anonymous functions)

In the anonymous function we introduce a global function so we need to add \ (ps:php new feature, namespace chapter, global namespace) in front of the function

5, front-end display error message

The front-end display, we use $errors variables to display errors, according to official documentation, the invocation is an example of an Illuminate\Support\MessageBag interest that can be seen below. We use it count($errors) > 0 to determine if there is an error, using the $errors->first() display of an error message:


@if (Count ($errors) > 0)  <p class= "alert Alert-danger display-hide" style= "Display:block;" >    <button class= "Close" data-close= "alert" ></button>    <span>  </span>  </p> @endif

Someone might ask, if my error is not displayed in a fixed place, but instead shows the error message after each form, so how can we judge and display it? The answer is $errors->has('oldpassword') to use to determine if there is an error with this name, and if so, use to $errors->first('oldpassword') display this error:


@if ($errors->has (' OldPassword '))  <p class= "alert Alert-danger display-hide" style= "Display:block;" >    <button class= "Close" data-close= "alert" ></button>    <span>  </span>  </p> @endif

oldpasswordThis is the name value in each form, so after when using the method to add custom errors $validator->errors()->add('oldpassword', '原密码错误'); , be sure to write the error on oldpassword which form is in order to display correctly.

6. After the completion of the example

Usercontroller

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 ' = ' password cannot be null ', ' between ' + ' password must be between 6~20 bits ', ' confirmed ' + ' new password and Confirm password mismatch '];  $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 ', ' original password error ');  }  }); if ($validator->fails ()) {return back ()->witherrors ($validator);//Return one-time error} $user->password = Bcrypt ($pass  Word);  $user->save (); Auth::logout (); After changing this password, exit this user return redirect ('/login ');} 

Reset.blade

<form class= "Login-form" action= "method=" POST "> 

Related recommendations:

The eloquent relationship of learning Laravel5

Laravel writing the App interface (API)

The problem and solution of laravel5.5 Controller's parameter sequence

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.