PHP中间件验证登录

  public function index(){
        $rule = [
            'username' => 'require',
            'password' => 'require',
        ];
        $message = [
            'username.require' => '用户名不能为空',
            'password.require' => '密码不能为空',
           // 'customer_phone.mobile' => '客户手机格式不正确',
        ];
        //字段校验
        $params = $this -> params;
        $conf = $this -> validate -> make($rule, $message);
        if(!$conf -> check($params)) {
           // throw new Exception($conf -> getError(), api::PARAM_ERROR);
            return $this->api->error($conf -> getError());
        }
        $admin_user =  Administrator::field('salt,id,password,token')->where('name',$params['username'])->find();
        if($admin_user){
            $params['id']=$admin_user['id'];
            $params['token']=$admin_user['token'];
              if($admin_user['password']== md5($params['password'].$admin_user['salt'])){
                  return $this->loginUpdata($params);
              }else{

                  return $this->api->error('登录失败');
              }
        }else{

            return $this->api->error('登录失败');
        }
    }
 public function loginUpdata($admin_info) {     //登录验证
        $ip = $this -> request -> ip();
        $last_time = time();
        $hash_ids_str = config("hash_ids_str");
        $hashids   = new Hashids($hash_ids_str);   //hashids 加密
        $token_str = config("token_str");
        $token     = md5($token_str.$last_time);
        $up_data   = [
            "login_ip" => $ip,
            "login_time" => $last_time,
           // "token" => $token
        ];
        $user_model = new Administrator();
        $save_result = $user_model -> isUpdate(true) -> save($up_data, [
            "id" => $admin_info['id']
        ]);
        if(isset($admin_info['password'])) unset($admin_info['password']);
        if(isset($admin_info['rand_str'])) unset($admin_info['rand_str']);
        if($save_result) {
                $echo_data = [
                    "uid" => $hashids -> encode($admin_info['id']),
                    //"token" => $token,    //重置token  单点登录
                    "token"=>$admin_info['token'],   //    不重置token  多点登录
                    'name' => $admin_info["username"],
                ];
                cookie("bk_wid", null);
               return $this->api->success("登录成功", $echo_data);
        } else {
                cookie("bk_wid", null);
                return $this -> api -> error("登录失败",0);
        }
    }

中间件验证登录

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laravel提供了多种登录验证方式,包括基于表单认证、基于API认证、基于社交媒体认证等。 以下是基于表单认证的登录验证示例: 1. 创建认证控制器 可以使用Artisan命令快速生成: ``` php artisan make:auth ``` 这将创建一个控制器和视图文件,用于用户登录、注册、密码找回等操作。 2. 配置路由 在routes/web.php文件中添加以下路由: ``` Route::get('login', 'Auth\LoginController@showLoginForm')->name('login'); Route::post('login', 'Auth\LoginController@login'); Route::post('logout', 'Auth\LoginController@logout')->name('logout'); ``` 3. 配置认证驱动 在config/auth.php文件中配置认证驱动,例如使用Eloquent模型: ``` 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], ], ``` 4. 配置用户模型 在User模型中实现Authenticatable接口,例如: ``` use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { // ... } ``` 5. 配置登录视图 在resources/views/auth/login.blade.php视图文件中添加登录表单,例如: ``` <form method="POST" action="{{ route('login') }}"> @csrf <div class="form-group row"> <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label> <div class="col-md-6"> <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus> @error('email') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label> <div class="col-md-6"> <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password"> @error('password') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <div class="col-md-6 offset-md-4"> <div class="form-check"> <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}> <label class="form-check-label" for="remember"> {{ __('Remember Me') }} </label> </div> </div> </div> <div class="form-group row mb-0"> <div class="col-md-8 offset-md-4"> <button type="submit" class="btn btn-primary"> {{ __('Login') }} </button> @if (Route::has('password.request')) <a class="btn btn-link" href="{{ route('password.request') }}"> {{ __('Forgot Your Password?') }} </a> @endif </div> </div> </form> ``` 6. 实现登录逻辑 在Auth\LoginController控制器中实现登录逻辑,例如: ``` use Illuminate\Http\Request; class LoginController extends Controller { public function login(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { $request->session()->regenerate(); return redirect()->intended('/'); } return back()->withErrors([ 'email' => 'The provided credentials do not match our records.', ]); } } ``` 在上述代码中,首先使用$request->only()方法获取请求参数,然后使用Auth::attempt()方法进行认证,如果认证成功则调用$request->session()->regenerate()方法重新生成会话ID,最后使用redirect()方法跳转到指定页面(例如/表示首页),如果认证失败则使用back()方法返回上一页,并通过withErrors()方法返回错误信息。 7. 添加中间件 如果需要在用户访问某些页面时进行登录验证,可以添加中间件: ``` Route::get('profile', function () { // 只有已登录用户才能访问该页面 })->middleware('auth'); ``` 在上述代码中,只有已登录用户才能访问/profile页面,否则将被重定向到登录页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值