Maison >développement back-end >tutoriel php >Méthode d'implémentation de validation des données et d'authentification des utilisateurs dans laravle5.4
//登入模块 Route::match(['get','post'],'/admin/login','Admin\ManagerController@login');
php artisan make:controller Admin\ManagerController
public function Login(Request $request){ if($request->isMethod('get')){ //显示视图 return view('Admin.login'); }elseif($request->isMethod(''post)){ //数据处理 //1.数据验证(用户名长度是否合法) //2.用户认证(用户名和密码在数据库中是否存在) } }
Adresse du package de fonctions : Package de fonctions de code de vérification
Utiliser la commande :
composer require mews/captcha
Instructions : Si une erreur se produit , vérifiez si l'extension PHP php_fileinfo est activée
//集成验证码类 Mews\Captcha\CaptchaServiceProvider::class,
Modifiez le tableau des alias :
Supprimez l'alias de la classe de code de vérification intégrée, et vous pourrez ensuite utiliser le Captcha de façade comme Route
Ajouter. le code suivant :
'Captcha' => Mews\Captcha\Facades\Captcha::class,
Remarque : Cette classe de code de vérification peut également être configurée
php artisan vendor:publish
return [ 'default' => [ 'length' => 5, 'width' => 120, 'height' => 36, 'quality' => 90, ], // ... ];
Il existe deux méthodes pour générer :
Dans la vue : Captcha::create();
Dans le contrôleur : Captcha::src(); Visible : Blog
<img src="{{ captcha_src() }}" alt="Méthode d'implémentation de validation des données et d'authentification des utilisateurs dans laravle5.4" > <a id="kanbuq" href="javascript:;">看不清,换一张</a> </p>
public function login(Request $request) { if($request->isMethod('get')){ //显示数据 return view('Admin.login'); }elseif($request->isMethod('post')){ //数据处理 //1.数据验证(用户名长度,是否为空) /* *参数一:$request对象【接收的数据】 * 参数二:验证规则 * */ //第一种方式: $this->validate($request,[ 'username'=>'required|min:2|max:16', 'password'=>'required|between:4,20', 'captcha'=>'required|size:5|captcha',//这里的captcha规则是继承的验证码插件自带的 ]); echo "验证通过"; } }
Vous devez d'abord introduire la classe :
use Validator; public function login(Request $request) { if($request->isMethod('get')){ //显示数据 return view('Admin.login'); }elseif($request->isMethod('post')){ //数据处理 //1.数据验证(用户名长度,是否为空) /* *参数一:$request对象【接收的数据】 * 参数二:验证规则 * */ //第二种方式: $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')//验证失败后跳转地址 ->withErrors($validator)//将错误信息一次性保存到session中 ->withInput();//保留原来输入的值 } echo "验证通过"; } }
Afficher le message d'erreur dans le modèle :
@if (count($errors) > 0) <p class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </p> @endif
**Remarque : Parce que la fonction withErrors() enregistre le message d'erreur immédiatement Dans la session, si vous souhaitez que la valeur dans la zone de saisie soit conservée après l'erreur de vérification, vous pouvez utiliser la fonction old()
telle que :
<input>
Le message d'erreur affiché par laravel est en anglais par défaut. Si nous voulons l'afficher en chinois, nous devons télécharger le pack de langue. Adresse : Pack de langue chinoise
'locale' => 'zh-CN'
Car par défaut, il n'y a pas de traduction chinoise correspondant au captcha dans le package linguistique, on peut le personnaliser, dans le tableau attributsAjouter
'captcha' =>'验证码',5.4 dans les options, ajouter la traduction de validation. captcha
Jugez si le code de vérification est correct
doit être dans les règles de vérification Ajoutez un captcha, qui est une règle fournie par un plug-in tiers
Modifiez le fichier comme suit :
//引入auth门面,用户认证 use Illuminate\Support\Facades\Auth;2 méthodes d'écriture Ajoutez le code suivant dans la méthode de connexion
public function login(Request $request) { if($request->isMethod('get')){ //显示数据 return view('Admin.login'); }elseif($request->isMethod('post')){ //数据处理 //1.数据验证(用户名长度,是否为空) /* *参数一:$request对象【接收的数据】 * 参数二:验证规则 * */ //第二种方式: $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') ->withErrors($validator)//将错误信息一次性保存到session中 ->withInput();//保留原来输入的值 } //2.用户认证(用户名与密码在数据库中是否能查询到) $username =$request->input('username'); $password = $request->input('password'); if(Auth::guard('admin')->attempt(['username'=>$username,'password'=>$password])){ echo "认证成功"; //记录认证状态 }else{ echo "认证失败"; //跳转到登入页面 } } }Erreur trouvée :
Cause : SQL la requête est la table it_users
Solution : Modifier la configuration d'authentification
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], 'admin' =>[ 'driver' => 'session', 'provider' => 'admin', //报错信息,我们加入这样一个数组,对应下面的provider的配置 ], ],2. >
'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admin' => [ 'driver' => 'eloquent', 'model' => App\Manager::class,//建立的模型是与这里的Manager名称一致 ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], ],
public function login(Request $request) { if($request->isMethod('get')){ //显示数据 return view('Admin.login'); }elseif($request->isMethod('post')){ //数据处理 //1.数据验证(用户名长度,是否为空) /* *参数一:$request对象【接收的数据】 * 参数二:验证规则 * */ //第一种方式: /* $this->validate($request,[ 'username'=>'required|min:2|max:16', 'password'=>'required|between:4,20', 'captcha'=>'required|size:5|captcha',//这里的captcha规则是继承的验证码插件自带的 ]);*/ //第二种方式: $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') ->withErrors($validator)//将错误信息一次性保存到session中 ->withInput();//保留原来输入的值 } //2.用户认证(用户名与密码在数据库中是否能查询到) $username =$request->input('username'); $password = $request->input('password'); //使用自定义的guard【admin】 if(Auth::guard('admin')->attempt(['username'=>$username,'password'=>$password])){ return redirect('/admin/index'); //记录认证状态 }else{ echo "认证失败"; //跳转到登入页面 return redirect('/admin/login') ->withErrors(['loginError'=>'用户名或密码错误']) ->withInput(); } } }Exécuter la commande :
Écrire le modèle Manager.php
php artisan make:model Manager
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Manager extends Model{ //3.定义属性:代表软删除的字段 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']; }
Solution : Implémenter l'interface Auth (contrat) dans le modèle
Interface introduite :
Utilisez le mot-clé use à l'intérieur de la classe : contient des traits, implémente le contrat
use \Illuminate\Auth\Authenticatable;
Remarque :
Remarque : Si l'authentification est réussie Ensuite, lors du retour à la connexion page, le code de vérification ne peut pas être affiché normalement. Supprimez le fichier de session sous storageframeworksessions<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Manager extends Model implements \Illuminate\Contracts\Auth\Authenticatable{ //使用auth模块下的Authenticatable实现Contracts\Auththenticatable //查看这个类,发现这个类是trait 类型,就可以在类内使用use + 类名,从而可以使用这个类的方法 use \Illuminate\Auth\Authenticatable; //3.定义属性:代表软删除的字段 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']; }
Recommandations associées :
php pour obtenir diverses Exemple d'analyse de la validation des données
Classe de validation des données du formulaire php, tutoriel php validation_PHP
Code PHP pour implémenter la validation des données du formulaire class_php exemple
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!