Implementierungsmethode zur Datenvalidierung und Benutzerauthentifizierung in laravle5.4

小云云
Freigeben: 2023-03-21 14:08:02
Original
1160 Leute haben es durchsucht


Dieser Artikel teilt Ihnen hauptsächlich die Implementierungsmethoden der Datenüberprüfung und Benutzerauthentifizierung von laravle5.4 mit und hofft, allen zu helfen.

1. Routen planen

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

2. Controller generieren

php artisan make:controller Admin\ManagerController
Nach dem Login kopieren

3. Den Controllern entsprechende Methoden schreiben

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

Codeklasse

1. Verifizierungscode-Funktionspaket installieren

Funktionspaketadresse: Verifizierungscode-Funktionspaket
Befehl verwenden:

composer require mews/captcha
Nach dem Login kopieren

Anweisungen: Wenn ein Fehler auftritt , prüfen Sie, ob die PHP-Erweiterung php_fileinfo aktiviert ist

2. Registrieren Sie das Verifizierungscode-Funktionspaket in Laravel

2.1 Ändern Sie config/app.php und fügen Sie den folgenden Code im Provider-Element hinzu:

//集成验证码类
    Mews\Captcha\CaptchaServiceProvider::class,
Nach dem Login kopieren

2.2 Aliase registrieren

Ändern Sie das Alias-Array:
Entfernen Sie den Alias ​​der integrierten Bestätigungscode-Klasse, und verwenden Sie dann die Fassaden-Captcha-ähnliche Route
Hinzufügen der folgende Code:

'Captcha' => Mews\Captcha\Facades\Captcha::class,
Nach dem Login kopieren

Hinweis: Diese Verifizierungscodeklasse kann auch konfiguriert werden

①Führen Sie den Befehl aus:
php artisan vendor:publish
Nach dem Login kopieren
②Nach dem Ausführen des Befehls wird die Datei config /captcha.php wird generiert
③Konfiguration, wie zum Beispiel:
return [
    'default'   => [
        'length'    => 5,
        'width'     => 120,
        'height'    => 36,
        'quality'   => 90,
    ],
    // ...
];
Nach dem Login kopieren

3. Verifizierungscodeklasse generieren:

Es gibt zwei Methoden zum Generieren:

  1. In der Ansicht: Captcha::create();

  2. Im Controller: Captcha::src(); Sichtbar: Blog

3.1 Generieren

                <img  src="{{ captcha_src() }}" alt="Implementierungsmethode zur Datenvalidierung und Benutzerauthentifizierung in laravle5.4" > <a id="kanbuq" href="javascript:;">看不清,换一张</a> </p>
Nach dem Login kopieren

direkt in der Ansicht 4. Datenüberprüfung

4.1 Die erste Methode

 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 "验证通过";
            }
}
Nach dem Login kopieren

Die zweite Methode: Validator-Fassadenüberprüfung verwenden

Zuerst müssen Sie die Klasse vorstellen:

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 "验证通过";
                    }
    }
Nach dem Login kopieren

Fehlermeldung in der Vorlage anzeigen:

@if (count($errors) > 0)        <p class="alert alert-danger">
            <ul>
                @foreach ($errors->all() as $error)                    <li>{{ $error }}</li>
                @endforeach            </ul>
        </p>
    @endif
Nach dem Login kopieren

**Hinweis: Weil die Funktion withErrors() die Fehlermeldung sofort speichert Wenn Sie möchten, dass der Wert im Eingabefeld nach dem Überprüfungsfehler in der Sitzung beibehalten wird, können Sie die Funktion old()
verwenden, z. B.:

<input id="username" name="username" value="{{ old(&#39;username&#39;) }}" type="text" placeholder="账户" class="input-text size-L">
Nach dem Login kopieren

5. Die Fehlermeldung wird auf Englisch angezeigt

Die von Laravel angezeigte Fehlermeldung ist standardmäßig auf Englisch. Wenn wir sie auf Chinesisch anzeigen möchten, müssen wir das Sprachpaket herunterladen. Adresse: Chinesisches Sprachpaket

5.1. Entpacken Sie das Sprachpaket in das Verzeichnis resources/lang

5.2. Ändern Sie das lokale Attribut von config/app.php Stellen Sie sicher, dass es mit dem Dateinamen im Lang-Verzeichnis übereinstimmt

&#39;locale&#39; => &#39;zh-CN&#39;
Nach dem Login kopieren

5.3 Anpassen Captcha-Übersetzung hinzufügen

Da es standardmäßig keine chinesische Übersetzung für Captcha im Sprachpaket gibt, Wir können es anpassen, im Array attributes< in der Datei resources/lang/zh-CN/validation.php 🎜>Fügen Sie

 &#39;captcha&#39;               =>&#39;验证码&#39;,
Nach dem Login kopieren
5.4 in den Optionen hinzu und fügen Sie die Übersetzung der Validierung hinzu. Captcha

Beurteilen Sie, ob der Bestätigungscode korrekt ist
muss in den Überprüfungsregeln enthalten sein. Fügen Sie ein Captcha hinzu, eine Regel, die von einem Drittanbieter-Plug-in bereitgestellt wird
Implementierungsmethode zur Datenvalidierung und Benutzerauthentifizierung in laravle5.4 Ändern Sie die Datei wie folgt:

Implementierungsmethode zur Datenvalidierung und Benutzerauthentifizierung in laravle5.4

Benutzerauthentifizierung

1. Einführung der Auth-Fassade

//引入auth门面,用户认证
use Illuminate\Support\Facades\Auth;
Nach dem Login kopieren
2 Schreibmethode

Fügen Sie den folgenden Code in die Anmeldemethode ein

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 "认证失败";                //跳转到登入页面
            }

        }
    }
Nach dem Login kopieren
Fehler gefunden:


Implementierungsmethode zur Datenvalidierung und Benutzerauthentifizierung in laravle5.4

Ursache: SQL Abfrage ist it_users Tabelle
Lösung: Authentifizierungskonfiguration ändern

1. Konfigurieren Sie Anbieter

    &#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的配置
        ],
    ],
Nach dem Login kopieren
3. Ändern Sie die Anmeldemethode in 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;,        // ],
    ],
Nach dem Login kopieren
Manager-Modell erstellen

Befehl ausführen:
 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();
            }

        }
    }
Nach dem Login kopieren

Schreiben des Manager.php-Modells

php artisan make:model Manager
Nach dem Login kopieren
Ein Fehler wurde gefunden

<?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;];
}
Nach dem Login kopieren

Lösung:
Authentifizierungsschnittstelle (Vertrag) im Modell implementierenImplementierungsmethode zur Datenvalidierung und Benutzerauthentifizierung in laravle5.4

Schnittstelle eingeführt:

Verwenden Sie das Schlüsselwort use innerhalb der Klasse: enthält Merkmale, implementiert den Vertrag

use \Illuminate\Auth\Authenticatable;
Nach dem Login kopieren
Hinweis:

Hinweis: Wenn die Authentifizierung erfolgreich ist. Danach, wenn Sie zum Login zurückkehren Seite kann der Bestätigungscode nicht normal angezeigt werden. Löschen Sie die Sitzungsdatei unter 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;];
}
Nach dem Login kopieren

Verwandte Empfehlungen:

php, um verschiedene zu erreichen Beispielanalyse der Datenvalidierung

PHP-Formulardatenvalidierungsklasse, PHP-Formularvalidierung_PHP-Tutorial

PHP-Code zur Implementierung der Formulardatenvalidierungsklasse_php Instanz

Das obige ist der detaillierte Inhalt vonImplementierungsmethode zur Datenvalidierung und Benutzerauthentifizierung in laravle5.4. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage