laravel5.8实现登录次数限制【附laravel5.8视频教程】

在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();
    }
}
4424012-27c072d48636b3ef.png
错误次数过多的提醒



本人有份laravel5.8和laravel6教学课程,需要的同学可以关注公众号:小贝壳的资源库恢复laravel获取

4424012-5e9d5d3378d4d26d.jpg
关注公众号获取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值