php 登陆次数限制,laravel5.8实现登录次数限制

在LogininController中引入LoginController类

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

}

完整代码:

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

}

}

9d6df384ad65

错误次数过多的提醒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值