This article is mainly to share with you laravle5.4 data validation and user authentication implementation method, hope to help everyone.
1. Planning for routing
Login Module Route::match ([' Get ', ' post '], '/admin/login ', ' admin\managercontroller@login ');
2. Build controller
PHP Artisan Make:controller Admin\managercontroller
3, write the controller corresponding method
Public Function Login (Request $request) { if ($request->ismethod (' get ')) { //Display view return (' Admin.login '); } ElseIf ($request->ismethod ("Post)) { //Data processing //1. Data validation (user name length is legal) //2. User authentication (user name and password exist in database) }}
Integrated Verification Code class
1. Install the Verification Code Feature Pack
Feature Pack Address: Verification Code Feature Pack
Use the command:
Composer require Mews/captcha
Note: If an error occurs, check to see if PHP extension Php_fileinfo is turned on
2. Register the Verification Code feature pack with the Laravel
2.1 Modify config/app.php, add the following code to the providers entry:
Integrated verification Code class Mews\captcha\captchaserviceprovider::class,
2.2 Registering aliases
To modify an aliases array:
Add the integrated Captcha class to the individual name, and you can use the façade captcha like a route later
Add the following code:
' Captcha ' = Mews\captcha\facades\captcha::class,
Description: The Captcha class can also be configured
① Execute Command:
PHP Artisan Vendor:publish
② a file is generated when the command finishes executing config/captcha.php
③ configuration, such as:
return [ ' default ' = + [ ' length ' = 5, ' width ' = ' + ', ' height ' = 36, ' quality ' = +, ], //...];
3. Generate Verification Code class:
There are two ways to generate:
In the View: Captcha::create ();
In the controller: CAPTCHA::SRC (); Visible: blog post
3.1 Generating directly in the view
<a id= "kanbuq" href= "javascript:;" > can not see Clearly, change a </a> </p>
4. Data validation
4.1 The first one
Public Function Login (Request $request) { if ($request->ismethod (' get ')) { //Display Data return view (' Admin.login '); } ElseIf ($request->ismethod (' post ')) { //Data processing //1. Data validation (user name length, whether blank) / * * Parameter one: $request object "Data Received" * Parameter two: validation rules * * ///First way: $this->validate ($request, [ ' username ' = ' required|min:2| ') Max:16 ', ' password ' = ' required|between:4,20 ', ' captcha ' = ' required|size:5|captcha ',// The captcha rule here is inherited code plugin comes with ]); echo "Validation passed"; }}
4.2, the second way: using validator façade verification
First you need to introduce a class:
Use Validator; Public Function Login (Request $request) { if ($request->ismethod (' get ')) { //Display Data return view (' Admin.login '); } ElseIf ($request->ismethod (' post ')) { //Data processing //1. Data validation (user name length, whether blank) / * * Parameter one: $request object "Data Received" * Parameter two: verification Rule * * ///Second way: $validator = Validator::make ($request->all (), [ ' username ' = > ' required|min:2|max:16 ', ' password ' = ' required|between:4,20 ', ' captcha ' = ' required|size:5| ' Captcha ', ]); if ($validator->fails ()) { return redirect ('/admin/login ')//verify failed after jump address ->witherrors ($validator)// Save the error message to the session ->withinput ();//Keep the original input value } echo "validation passed"; } }
To display an error message in the template:
@if (Count ($errors) > 0) <p class= "alert Alert-danger" > <ul> @foreach ($errors->all () As $error) <li>{{$error}}</li> @endforeach </ul> </p> @endif
* * Note: Because the witherrors () function saves the error message to the session once, if you want the value in the input box to remain after the validation error, you can use the old () function
Such as:
<input id= "username" name= "username" value= "{{old (' username ')}}" type= "text" placeholder= "account" class= "Input-text Size-l ">
5, about the error message display in English
Laravel the error message displayed by default is English, we need to download the language pack if we want to display it in Chinese, address: Chinese language pack
5.1. After decompression, copy the ZH-CN in the language pack to the Resources/lang directory
5.2. Modify the local property of the config/app.php to ensure that the file name is consistent with the Lang directory
' Locale ' = ' ZH-CN '
5.3. Custom Add CAPTCHA Translation
Because, by default, the language pack does not have a captcha corresponding to the Chinese translation, we can customize the array attributes options in the resources/lang/zh-cn/validation.php file to add
' captcha ' = ' Verification Code ',
5.4. Add Validation.captcha Translation
determine if the verification code is correct
need to include CAPTCHA in validation rules, which are rules provided by third-party plug-ins
Modify the file as follows:
User authentication
1. Introduction of Auth Façade
Introduction of Auth façade, user authentication use Illuminate\support\facades\auth;
2 Writing methods
Add the following code to the login method
Public Function Login (Request $request) {if ($request->ismethod (' get ')) {//Display data return View (' Admin.login '); }elseif ($request->ismethod (' post ')) {//Data processing//1. Data validation (user name length, whether blank)/* * Parameter one: $ Request Object "Data received" * parameter two: validation rule * *///second way: $validator = Validator::make ($reque St->all (), [' username ' = ' required|min:2|max:16 ', ' password ' = ' required|between:4,20 ' , ' captcha ' = ' Required|size:5|captcha ',]); if ($validator->fails ()) {return redirect ('/admin/login ')->witherrors ($validat OR)//To save the error message to the session->withinput ();//Keep the original input value}//2. user authentication (user name and password in database can be queried) $username = $request->input (' username '); $password = $request->input (' password '); if (Auth::guard (' admin ')->aTtempt ([' username ' + $username, ' password ' + $password])) {echo "Certified successful"; Record authentication status}else{echo "Authentication failed"; Jump to login page}}}
Error found:
cause: The SQL query is a it_users table
FIX: Modify AUTH configuration
1. Custom Guard Configuration
' Guards ' = [ ' web ' + = ' driver ' + ' session ', ' provider ' and ' users ', ], ' API ' = [ c8/> ' driver ' = ' token ', ' provider ' and ' users ', ', ' admin ' =>[ ' driver ' and ' session ', c13/> ' provider ' = ' admin ', //error message, we add such an array, corresponding to the following provider configuration ],
2. Configure providers
' Providers ' = [ ' users ' and ' = ' driver ' = ' eloquent ', ' model ' + App\user::class, ], ' Admin ' = ' = [ ' driver ' = ' eloquent ', ' model ' and ' app\manager::class,//' are built with the same Manager name as here ], //' users ' + = [ // ' driver ' + ' database ', // ' table ' = ' users ', //] ,
3. Modify the login method in managercontroller.php
Public Function Login (Request $request) {if ($request->ismethod (' get ')) {//Display data return View (' Admin.login '); }elseif ($request->ismethod (' post ')) {//Data processing//1. Data validation (user name length, whether blank)/* * Parameter one: $ Request Object "Data received" * parameter two: validation rule * *////First way:/* $this->validate ($request, [ ' Username ' = ' required|min:2|max:16 ', ' password ' = ' required|between:4,20 ', ' Captcha ' = ' required|size:5|captcha ',///Here the CAPTCHA rule is inherited code plugin comes with]); *///Second way: $validat or = Validator::make ($request->all (), [' username ' = ' required|min:2|max:16 ', ' password ' = > ' required|between:4,20 ', ' captcha ' = ' Required|size:5|captcha ',]); if ($validator->fails ()) {return redirect ('/admin/login ')->witherrors ($validat OR)//WillThe error message is saved to the session->withinput ();//Keep the value originally entered}//2. user authentication (user name and password can be queried in the database) $username = $request->input (' username '); $password = $request->input (' password '); Use the Custom Guard "admin" if (auth::guard (' admin ')->attempt ([' username ' = = $username, ' password ' = ' = $password])) { Return redirect ('/admin/index '); Record authentication status}else{echo "Authentication failed"; Jump to login page return redirect ('/admin/login ')->witherrors ([' loginError ' = ' username or password error ']) ->withinput (); } } }
Creating the manager model
Execute command:
PHP Artisan Make:model Manager
Writing the manager.php model
<?phpnamespace app;use illuminate\database\eloquent\model;class Manager extends model{ //3. Defining properties: Fields that represent soft deletions protected $data = [' deleted_at ']; Protected $table = "Manager"; protected $primaryKey = "mg_id"; protected $fillable = [' username ', ' password ', ' mg_role_ids ', ' mg_sex ', ' mg_phone ', ' mg_email ', ' Mg_remark '];}
Found an error
Workaround: Implement the Auth Interface (contract) in the model
Introduction Interface:
Use \illuminate\auth\authenticatable;
Using the Use keyword inside a class: Contains trait, implements the contract
<?phpnamespace app;use Illuminate\database\eloquent\model;class Manager extends Model implements \illuminate\ contracts\auth\authenticatable{ //Use the authenticatable implementation under the Auth module contracts\auththenticatable //view this class, It is found that this class is a trait type and can be used within a class using the Use + class name, so that the class can be used using the \illuminate\auth\authenticatable method. 3. Define properties: Represents a soft-deleted field protected $data = [' deleted_at ']; Protected $table = "Manager"; protected $primaryKey = "mg_id"; protected $fillable = [' username ', ' password ', ' mg_role_ids ', ' mg_sex ', ' mg_phone ', ' mg_email ', ' Mg_remark '];}
Note: If after the successful authentication, the return login page verification code can not be normal storage\framework\sessions under the session file deletion
Related recommendations:
Example Analysis of PHP implementation of data validation
PHP form data validation class, PHP form validation _php Tutorial
PHP Code implementation form data validation class _php instance