Heim >Backend-Entwicklung >PHP-Tutorial >Implementierungsmethode zur Datenvalidierung und Benutzerauthentifizierung in laravle5.4

Implementierungsmethode zur Datenvalidierung und Benutzerauthentifizierung in laravle5.4

小云云
小云云Original
2018-03-15 13:50:581210Durchsuche


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');

2. Controller generieren

php artisan make:controller Admin\ManagerController

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.用户认证(用户名和密码在数据库中是否存在)
    }
}

Codeklasse

1. Verifizierungscode-Funktionspaket installieren

Funktionspaketadresse: Verifizierungscode-Funktionspaket
Befehl verwenden:

composer require mews/captcha

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,

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,

Hinweis: Diese Verifizierungscodeklasse kann auch konfiguriert werden

①Führen Sie den Befehl aus:
php artisan vendor:publish
②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,
    ],
    // ...
];

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>

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 "验证通过";
            }
}

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 "验证通过";
                    }
    }

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

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

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

'locale' => 'zh-CN'

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 attributesFügen Sie

 'captcha'               =>'验证码',
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;
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 "认证失败";                //跳转到登入页面
            }

        }
    }
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的配置
        ],
    ],
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;,        // ],
    ],
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();
            }

        }
    }

Schreiben des Manager.php-Modells

php artisan make:model Manager
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;];
}

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;
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;];
}

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!

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