Maison  >  Article  >  développement back-end  >  Méthode d'implémentation de validation des données et d'authentification des utilisateurs dans laravle5.4

Méthode d'implémentation de validation des données et d'authentification des utilisateurs dans laravle5.4

小云云
小云云original
2018-03-15 13:50:581153parcourir


Cet article partage principalement avec vous les méthodes de mise en œuvre de la vérification des données laravle5.4 et de l'authentification des utilisateurs, dans l'espoir d'aider tout le monde.

1. Planifier les itinéraires

//登入模块
Route::match(['get','post'],'/admin/login','Admin\ManagerController@login');

2. Générer des contrôleurs

php artisan make:controller Admin\ManagerController

3. Écrire des méthodes correspondant aux contrôleurs

public function Login(Request $request){    if($request->isMethod('get')){        //显示视图
        return view('Admin.login');
    }elseif($request->isMethod(''post)){        //数据处理
        //1.数据验证(用户名长度是否合法)
        //2.用户认证(用户名和密码在数据库中是否存在)
    }
}

Vérification intégrée. classe de code

1. Installer le package de fonctions de code de vérification

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

2. Enregistrez le package de fonctions de code de vérification dans laravel

2.1 Modifiez config/app.php et ajoutez le code suivant dans l'élément fournisseurs :

//集成验证码类
    Mews\Captcha\CaptchaServiceProvider::class,

2.2 Enregistrez les alias

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

①Exécutez la commande :
php artisan vendor:publish
②Après avoir exécuté la commande, le fichier config /captcha.php sera généré
③Configuration, telle que :
return [
    'default'   => [
        'length'    => 5,
        'width'     => 120,
        'height'    => 36,
        'quality'   => 90,
    ],
    // ...
];

3. Générer une classe de code de vérification :

Il existe deux méthodes pour générer :

  1. Dans la vue : Captcha::create();

  2. Dans le contrôleur : Captcha::src(); Visible : Blog

3.1 Générer

                <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>

directement dans la vue 4. Vérification des données

4.1 La première méthode

 public function login(Request $request)
{
    if($request->isMethod(&#39;get&#39;)){
        //显示数据
        return view(&#39;Admin.login&#39;);
    }elseif($request->isMethod(&#39;post&#39;)){
        //数据处理
        //1.数据验证(用户名长度,是否为空)
        /*
         *参数一:$request对象【接收的数据】
         * 参数二:验证规则
         * */
        //第一种方式:
           $this->validate($request,[
           &#39;username&#39;=>&#39;required|min:2|max:16&#39;,
            &#39;password&#39;=>&#39;required|between:4,20&#39;,
            &#39;captcha&#39;=>&#39;required|size:5|captcha&#39;,//这里的captcha规则是继承的验证码插件自带的
        ]);
        echo "验证通过";
            }
}

4.2. méthode : utiliser la vérification de façade du validateur

Vous devez d'abord introduire la classe :

use Validator;

 public function login(Request $request)
    {
        if($request->isMethod(&#39;get&#39;)){
            //显示数据
            return view(&#39;Admin.login&#39;);
        }elseif($request->isMethod(&#39;post&#39;)){
            //数据处理
            //1.数据验证(用户名长度,是否为空)
            /*
             *参数一:$request对象【接收的数据】
             * 参数二:验证规则
             * */
           //第二种方式:
            $validator = Validator::make($request->all(),[
               &#39;username&#39;=>&#39;required|min:2|max:16&#39;,
                &#39;password&#39;=>&#39;required|between:4,20&#39;,
                &#39;captcha&#39;=>&#39;required|size:5|captcha&#39;,
            ]);
            if($validator->fails()){
                return redirect(&#39;/admin/login&#39;)//验证失败后跳转地址
                        ->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>

5. Le message d'erreur est affiché en anglais

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

5.1. Après décompression, décompressez le pack de langue zh-CN Copiez dans le répertoire resources/lang

5.2. Modifiez l'attribut local de config/app.php. assurez-vous qu'il est cohérent avec le nom du fichier dans le répertoire lang

'locale' => 'zh-CN'

5.3. Personnaliser Ajouter une traduction captcha

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
Méthode dimplémentation de validation des données et dauthentification des utilisateurs dans laravle5.4Modifiez le fichier comme suit :

Méthode dimplémentation de validation des données et dauthentification des utilisateurs dans laravle5.4

Authentification de l'utilisateur

1. Présentation de la façade Auth

//引入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(&#39;get&#39;)){            //显示数据
            return view(&#39;Admin.login&#39;);
        }elseif($request->isMethod(&#39;post&#39;)){            //数据处理
            //1.数据验证(用户名长度,是否为空)
            /*
             *参数一:$request对象【接收的数据】
             * 参数二:验证规则
             * */

           //第二种方式:
            $validator = Validator::make($request->all(),[               &#39;username&#39;=>&#39;required|min:2|max:16&#39;,                &#39;password&#39;=>&#39;required|between:4,20&#39;,                &#39;captcha&#39;=>&#39;required|size:5|captcha&#39;,
            ]);            if($validator->fails()){                return redirect(&#39;/admin/login&#39;)
                        ->withErrors($validator)//将错误信息一次性保存到session中
                        ->withInput();//保留原来输入的值
            }            //2.用户认证(用户名与密码在数据库中是否能查询到)
            $username  =$request->input(&#39;username&#39;);            $password = $request->input(&#39;password&#39;);            if(Auth::guard(&#39;admin&#39;)->attempt([&#39;username&#39;=>$username,&#39;password&#39;=>$password])){                echo "认证成功";                //记录认证状态
            }else{                echo "认证失败";                //跳转到登入页面
            }

        }
    }
Erreur trouvée :


Méthode dimplémentation de validation des données et dauthentification des utilisateurs dans laravle5.4

Cause : SQL la requête est la table it_users
Solution : Modifier la configuration d'authentification

1. Personnaliser la configuration de la garde

    &#39;guards&#39; => [        &#39;web&#39; => [          
      &#39;driver&#39; => &#39;session&#39;,            &#39;provider&#39; => &#39;users&#39;,
        ],        &#39;api&#39; => [            &#39;driver&#39; => &#39;token&#39;,           
         &#39;provider&#39; => &#39;users&#39;,
        ],        &#39;admin&#39; =>[            &#39;driver&#39; => &#39;session&#39;,          
          &#39;provider&#39; => &#39;admin&#39;,
          //报错信息,我们加入这样一个数组,对应下面的provider的配置
        ],
    ],
2. >

3. Modifier la méthode de connexion dans ManagerController.php

    &#39;providers&#39; => [        &#39;users&#39; => [           
     &#39;driver&#39; => &#39;eloquent&#39;,            &#39;model&#39; => App\User::class,
        ],        &#39;admin&#39; => [            
        &#39;driver&#39; => &#39;eloquent&#39;,           
         &#39;model&#39; => App\Manager::class,//建立的模型是与这里的Manager名称一致
        ],      
          // &#39;users&#39; => [       
           //     &#39;driver&#39; => &#39;database&#39;,      
             //     &#39;table&#39; => &#39;users&#39;,        // ],
    ],

Créer un modèle Manager

 public function login(Request $request)
    {
        if($request->isMethod(&#39;get&#39;)){            //显示数据
            return view(&#39;Admin.login&#39;);
        }elseif($request->isMethod(&#39;post&#39;)){            //数据处理
            //1.数据验证(用户名长度,是否为空)
            /*
             *参数一:$request对象【接收的数据】
             * 参数二:验证规则
             * */
            //第一种方式:
           /* $this->validate($request,[
               &#39;username&#39;=>&#39;required|min:2|max:16&#39;,
                &#39;password&#39;=>&#39;required|between:4,20&#39;,
                &#39;captcha&#39;=>&#39;required|size:5|captcha&#39;,//这里的captcha规则是继承的验证码插件自带的
            ]);*/
           //第二种方式:
            $validator = Validator::make($request->all(),[               &#39;username&#39;=>&#39;required|min:2|max:16&#39;,                &#39;password&#39;=>&#39;required|between:4,20&#39;,                &#39;captcha&#39;=>&#39;required|size:5|captcha&#39;,
            ]);            if($validator->fails()){                return redirect(&#39;/admin/login&#39;)
                        ->withErrors($validator)//将错误信息一次性保存到session中
                        ->withInput();//保留原来输入的值
            }            //2.用户认证(用户名与密码在数据库中是否能查询到)
            $username  =$request->input(&#39;username&#39;);            $password = $request->input(&#39;password&#39;);            //使用自定义的guard【admin】
            if(Auth::guard(&#39;admin&#39;)->attempt([&#39;username&#39;=>$username,&#39;password&#39;=>$password])){               return redirect(&#39;/admin/index&#39;);                //记录认证状态
            }else{                echo "认证失败";                //跳转到登入页面
                return redirect(&#39;/admin/login&#39;)
                    ->withErrors([&#39;loginError&#39;=>&#39;用户名或密码错误&#39;])
                    ->withInput();
            }

        }
    }
Exécuter la commande :

Écrire le modèle Manager.php

php artisan make:model Manager

Une erreur a été trouvée

<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Manager extends Model{

    //3.定义属性:代表软删除的字段
    protected $data = [&#39;deleted_at&#39;];    protected $table = "manager";    protected  $primaryKey = "mg_id";    protected $fillable = [&#39;username&#39;,&#39;password&#39;,&#39;mg_role_ids&#39;,&#39;mg_sex&#39;,&#39;mg_phone&#39;,&#39;mg_email&#39;,&#39;mg_remark&#39;];
}


Solution : Méthode dimplémentation de validation des données et dauthentification des utilisateurs dans laravle5.4Implé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 = [&#39;deleted_at&#39;];    protected $table = "manager";    protected  $primaryKey = "mg_id";    protected $fillable = [&#39;username&#39;,&#39;password&#39;,&#39;mg_role_ids&#39;,&#39;mg_sex&#39;,&#39;mg_phone&#39;,&#39;mg_email&#39;,&#39;mg_remark&#39;];
}

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn