在LogininController中引入LoginController
类
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
class LoginController extends Controller
{
use ThrottlesLogins;//重点
//表单提交过来的需要验证的字段。如果管理员表用的是laravel默认的users表,可以不指定
//我这里后台用户表不是默认的users表改成admin_user了
public $username = 'username';
public $maxAttempts = 2;//限制最多次数
因为自己修改了后台用户,所以要重写两个方法
/**
* 重写获取验证字段的方法
* @return string
*/
protected function username()
{
//判断是否定义了username,没有定义的话就用email
return property_exists($this,'username')? $this->username : 'email';
}
/**
* 记录登陆错误次数的session
* @param Request $request
* @return string
*/
protected function throttleKey(Request $request)
{
//添加admin说明是后台的
return Str::lower('admin.'.$request->input($this->username())).'|'.$request->ip();
}
这两个方法框架也提供了。源码位置:
\vendor\laravel\framework\src\Illuminate\Foundation\Auth\ThrottlesLogins.php
\vendor\laravel\framework\src\Illuminate\Foundation\Auth\AuthenticatesUsers.php
登录方法中进行判断限制
if($this->hasTooManyLoginAttempts($request)){
$request->session()->flash('errormsg','登录次数过多,请稍后重试');
$this->incrementLoginAttempts($request);//登录错误次数+1
Auth::logout();
return redirect()->back();
}
完整代码:
<?php
namespace App\Http\Controllers\Admin;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
class LoginController extends Controller
{
use ThrottlesLogins;//重点
//表单提交过来的需要验证的字段。如果管理员表用的是laravel默认的users表,可以不指定
//我这里后台用户表不是默认的users表改成admin_user了
public $username = 'username';
public $maxAttempts = 2;//限制最多次数
//登录
public function login(){
if(Auth::check()){
return redirect('admin/index');
}
return view('admin.login');
}
public function dologin(Request $request){
if($this->hasTooManyLoginAttempts($request)){
$request->session()->flash('errormsg','登录次数过多,请稍后重试');
$this->incrementLoginAttempts($request);//登录错误次数+1
Auth::logout();
return redirect()->back();
}
if(empty($request->input('code'))){
$request->session()->flash("errormsg","验证码不能为空");
return redirect()->back();
}
if(!captcha_check($request->input('code'))){
$request->session()->flash("errormsg", "验证码错误");
return redirect()->back();
}
$res = Auth::guard('admin')->attempt(['name' => $request->username, 'password' => $request->password]); //自带验证,里面传验证字段
if ($res) {
return redirect('admin/index');
} else {
$request->session()->flash("errormsg", "用户名或密码错误");
$this->incrementLoginAttempts($request);
return redirect()->back();
}
}
// 退出登录
public function logout(){
if(Auth::logout()){
return redirect('/admin/index');
}else{
return redirect('/admin/login');
}
}
/**
* 重写获取验证字段的方法
* @return string
*/
protected function username()
{
//判断是否定义了username,没有定义的话就用email
return property_exists($this,'username')? $this->username : 'email';
}
/**
* 记录登陆错误次数的session
* @param Request $request
* @return string
*/
protected function throttleKey(Request $request)
{
//添加admin说明是后台的
return Str::lower('admin.'.$request->input($this->username())).'|'.$request->ip();
}
}
本人有份laravel5.8和laravel6教学课程,需要的同学可以关注公众号:小贝壳的资源库恢复laravel获取