//登入模块 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.用户认证(用户名和密码在数据库中是否存在) } }
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
//集成验证码类 Mews\Captcha\CaptchaServiceProvider::class,
Ä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
php artisan vendor:publish
return [ 'default' => [ 'length' => 5, 'width' => 120, 'height' => 36, 'quality' => 90, ], // ... ];
Es gibt zwei Methoden zum Generieren:
In der Ansicht: Captcha::create();
Im Controller: Captcha::src(); Sichtbar: Blog
<img src="{{ captcha_src() }}" alt="Implementierungsmethode zur Datenvalidierung und Benutzerauthentifizierung in 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 "验证通过"; } }
Zuerst müssen Sie die Klasse vorstellen:
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 "验证通过"; } }
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 id="username" name="username" value="{{ old('username') }}" type="text" placeholder="账户" class="input-text size-L">
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
'locale' => 'zh-CN'
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
'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
Ändern Sie die Datei wie folgt:
//引入auth门面,用户认证 use Illuminate\Support\Facades\Auth;
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 "认证失败"; //跳转到登入页面 } } }
Ursache: SQL Abfrage ist it_users Tabelle
Lösung: Authentifizierungskonfiguration ändern
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], 'admin' =>[ 'driver' => 'session', 'provider' => 'admin', //报错信息,我们加入这样一个数组,对应下面的provider的配置 ], ],
'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(); } } }
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']; }
Lösung:
Authentifizierungsschnittstelle (Vertrag) im Modell implementieren
Verwenden Sie das Schlüsselwort use innerhalb der Klasse: enthält Merkmale, implementiert den Vertrag
use \Illuminate\Auth\Authenticatable;
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 = ['deleted_at']; protected $table = "manager"; protected $primaryKey = "mg_id"; protected $fillable = ['username','password','mg_role_ids','mg_sex','mg_phone','mg_email','mg_remark']; }
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!