Detailed explanation of Laravel password reset example
If you need to use laravel to build a back-end content management system, but laravel's default login registration cannot meet the current needs, reset the password because it is used in the back-end and does not need to send an email to reset, so the default reset is Passwords definitely won't work. Follow this article to see how to reset the password in Laravel.
1. First determine the route to reset the password
The reset password generated by default when we install laravel is Performed when the user is not logged in. Therefore, it is not feasible to use the original controller, and the original reset password does not need to check whether the original password is correct, but to directly change the password through email, so for the controller method, we also need to rewrite it . We use 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 get request to reset the password, followed by a post request to reset the password.
2. Display the password reset page
This uses the getReset
method , this method only needs to display a view, so there is no special logic
public function getReset() { return view('auth.reset'); }
3. Request to reset password
This uses the postReset
method. To receive data, we can use two methods to receive the passed data: One is to use the request method to receive data, The other is to use the Input::get method to obtain data. If Request
you need to introduce the use Illuminate\Http\Request
class, if Input
you need to introduce the use Input
class, here we choose to use request
to receive.
4. Verification rules
For verification, laravel provides us with a set of verification rules, use validator
The Validator::make()
method is used to verify
$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
Receive the data information passed from;
rules
Judge the received value, where oldpassword
and password
in front of the array are the name field data of the original password and new password received from the front end for verification;
The verification rules are all in the verification chapter of the manual. It is worth noting that using confirmed is to make the same judgment on the new password and the confirmed password. The name value required for the confirmed password must be the new password. Add '_confirmation'
after the name value. For example, if the name value of the new password is newpassword
, the name value of the confirmed password must be newpassword_confirmation
before the judgment can be made. messages
What prompts are displayed for verified data requests.
After passing the above verification, there is another situation that is not verified, that is, whether the original password entered is the same as the original password in the database.
Here we can first check out the user's information from the database, and then compare it with the original password entered. Here we use Auth::user()
to obtain user information. This method needs to introduce the use Auth;
class, and then pass Hash::check()
to determine the password. After the judgment, there is still a question, that is, how to push the error message into the error message of the validator. Here laravel provides us with the after method:
$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(); //成功后,保存新密码
Here because after
An anonymous function of PHP is introduced, so we need to use the use
keyword to pass external data into the anonymous function (PS: PHP new features, closures and anonymous functions)
In the anonymous function, we introduced a global function, so we need to add \(PS:php new features, namespace chapter, global namespace) in front of the function
5. The front-end displays error information
If the front-end displays it, we use the $errors
variable to display the error. According to the official documentation, the call is# If you are interested, you can take a look at the example of ##Illuminate\Support\MessageBag. We use
count($errors) > 0 to determine whether there is an error, and use
$errors->first() to display 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
$errors->has('oldpassword') to determine whether there is an error with this name. If there is, use
$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
其中oldpassword
是每个表单的里的name值,所以在使用after
方法添加自定义错误的时候 $validator->errors()->add('oldpassword', '原密码错误');
中,oldpassword
一定要写对是在哪个表单的错误,这样才能正确的显示。
6、完成后的示例
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' => '密码不能为空', '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
<form class="login-form" action="" method="post"> <h3 class="font-green">修改密码</h3> @if($errors->first()) <p class="alert alert-danger display-hide" style="display: block;"> <button class="close" data-close="alert"></button> <span> </span> </p> @endif {!! csrf_field() !!} <p 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"> </p> <p 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"> </p> <p 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"> </p> <p class="form-actions"> <button type="submit" id="register-submit-btn" class="btn btn-success uppercase pull-right">确定</button> </p> </form>
相关推荐:
The above is the detailed content of Detailed explanation of Laravel password reset example. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics











LaravelEloquent Model Retrieval: Easily obtaining database data EloquentORM provides a concise and easy-to-understand way to operate the database. This article will introduce various Eloquent model search techniques in detail to help you obtain data from the database efficiently. 1. Get all records. Use the all() method to get all records in the database table: useApp\Models\Post;$posts=Post::all(); This will return a collection. You can access data using foreach loop or other collection methods: foreach($postsas$post){echo$post->

Laravel is a PHP framework for easy building of web applications. It provides a range of powerful features including: Installation: Install the Laravel CLI globally with Composer and create applications in the project directory. Routing: Define the relationship between the URL and the handler in routes/web.php. View: Create a view in resources/views to render the application's interface. Database Integration: Provides out-of-the-box integration with databases such as MySQL and uses migration to create and modify tables. Model and Controller: The model represents the database entity and the controller processes HTTP requests.

When developing websites using CraftCMS, you often encounter resource file caching problems, especially when you frequently update CSS and JavaScript files, old versions of files may still be cached by the browser, causing users to not see the latest changes in time. This problem not only affects the user experience, but also increases the difficulty of development and debugging. Recently, I encountered similar troubles in my project, and after some exploration, I found the plugin wiejeben/craft-laravel-mix, which perfectly solved my caching problem.

Laravel provides a comprehensive Auth framework for implementing user login functions, including: Defining user models (Eloquent model), creating login forms (Blade template engine), writing login controllers (inheriting Auth\LoginController), verifying login requests (Auth::attempt) Redirecting after login is successful (redirect) considering security factors: hash passwords, anti-CSRF protection, rate limiting and security headers. In addition, the Auth framework also provides functions such as resetting passwords, registering and verifying emails. For details, please refer to the Laravel documentation: https://laravel.com/doc

Article summary: This article provides detailed step-by-step instructions to guide readers on how to easily install the Laravel framework. Laravel is a powerful PHP framework that speeds up the development process of web applications. This tutorial covers the installation process from system requirements to configuring databases and setting up routing. By following these steps, readers can quickly and efficiently lay a solid foundation for their Laravel project.

Efficiently process 7 million records and create interactive maps with geospatial technology. This article explores how to efficiently process over 7 million records using Laravel and MySQL and convert them into interactive map visualizations. Initial challenge project requirements: Extract valuable insights using 7 million records in MySQL database. Many people first consider programming languages, but ignore the database itself: Can it meet the needs? Is data migration or structural adjustment required? Can MySQL withstand such a large data load? Preliminary analysis: Key filters and properties need to be identified. After analysis, it was found that only a few attributes were related to the solution. We verified the feasibility of the filter and set some restrictions to optimize the search. Map search based on city

How does Laravel play a role in backend logic? It simplifies and enhances backend development through routing systems, EloquentORM, authentication and authorization, event and listeners, and performance optimization. 1. The routing system allows the definition of URL structure and request processing logic. 2.EloquentORM simplifies database interaction. 3. The authentication and authorization system is convenient for user management. 4. The event and listener implement loosely coupled code structure. 5. Performance optimization improves application efficiency through caching and queueing.

Want to learn the Laravel framework, but suffer from no resources or economic pressure? This article provides you with free learning of Laravel, teaching you how to use resources such as online platforms, documents and community forums to lay a solid foundation for your PHP development journey from getting started to master.
