一、后台管理系统:wamp64+tp6.*(登录流程)

提前准备:wamp64集环境配置域名配置等、php安装composer 管理工具 ,认真研读过thinkphp6.*官网 :https://doc.thinkphp.cn/v6_1/default.html

登录流程三个业务场景:

场景一:访问登录界面且sesseion未保存用户数据,登录成功后跳转主页;
场景二:登录完成后session记录登录用户数据且有效时间范围内,此时访问登录界面直接跳转主页;
场景三:session过期或清除,此时访问主页或其他页面跳转登录页重新登录

下载tp6及依赖库:

1.Tp6框架安装:composer create-project topthink/think 项目名称;
2.通过composer创建的框架在根目录有“.example.env”文件,把文件名称改成“.env”开启本地调试机制;
3.开启多应用:composer require topthink/think-multi-app;多应用开启后要把原来app下的 controller文件删了,不然系统入口文件会默认进入该控制器;
4.下载view引擎 :composer require topthink/think-multi-app
5.下载验证器机制:composer require topthink/think-captcha

场景 一(原生:只在controller&model中操作数据 ,未用到中间件):账号+密码+captcha验证码(tp6)登录

应用基础文件目录

1.文件创建:
app目录下创建admin应用:
①common公共文件:app/admin/common/model/mysql/AdminUser.php
AdminUuser
交互管理员数据表:
admin_user管理员数据表

<?php

namespace app\admin\common\model\mysql;

use think\Model;

class AdminUser extends Model
{
    /**
     * 通过用户名搜索
     * getAdminUserByUserName
     * @param $username
     * @return array|false|mixed
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function getAdminUserByUserName($username){
        if(empty($username)) {
            return false;
        }
        $where = [
            "username" => trim($username),
        ];
        $result = $this->where($where)->find();
        return $result;
    }

    /**
     * 根据主键ID更新数据库
     * @param $id
     * @param $data
     * @return bool
     */
    public function updateAdminUserData($id,$data){
        if(empty($id) || empty($data) || !is_array($data)){
            return false;
        }
        $where = [
            "id" => $id,
        ];
        self::where($where)->update($data);
        return true;
    }

}

②config文件:app/config/admin.php
自定义配置数据文件
③controller:app/controller/LoginController.php

<?php
namespace app\admin\controller;

use app\admin\common\model\mysql\AdminUser as AdminUserModel;
use app\BaseController;
use think\facade\View;
/**
 * 后台登录控制器
 */
class LoginController extends AdminBaseController
{
  /**
     * 登录界面
     * @return string
     */
    public function index(){
        return View::fetch();
    }

  /**
     * 用户登录数据校验
     * @return \think\response\Json
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\DbException
     * @throws \think\db\exception\ModelNotFoundException
     */
    public function check(){
        if(!$this->request->isPost()){
            return $this->jsonError("请求错误");
        }
        $username = $this->request->param("username","","trim");
        $password = $this->request->param("password","","trim");
        $captcha = $this->request->param("captcha","","trim");
        // 参数校验 1原生验证  2tp6验证机制
        if(!$username || !$password || !$captcha){
            return $this->jsonError("用户名|登录密码|验证码不能为空");
        }
        // 验证码校验
        if(!captcha_check($captcha)){
            return $this->jsonError("验证码错误");
        }
        try{
            $adminUserObject = new AdminUserModel();
            $adminUser = $adminUserObject->getAdminUserByUserName($username);
            if(empty($adminUser) || $adminUser->status != config("status.mysql.table_normal")){
                return $this->jsonError("用户不存在或用户状态不正常");
            }
            if($adminUser->password != md5($password)){
                return $this->jsonError("用户密码错误!");
            }
            $data = [
                "last_login_time" => time(),
                "last_login_ip" => $this->request->ip(),
                "update_time" => time(),
                "create_time" => time(),
                "operate_user" => $adminUser->username,
            ];
            $result = $adminUserObject->updateAdminUserData($adminUser->id,$data);
            if(!$result) $this->jsonError("用户数据更新失败");
            session(config("admin.session_admin"),$adminUser);
        }catch (\Exception $e){
            // todo 记录日志 $e->getMessage()
            return $this->jsonError("系统异常,登录失败");
        }
        return $this->jsonSuccess();
    }
}

④view视图文件:app/admin/view/login/index.html
前端文件判断登录成功后跳转主页

注:session服务需要在app/middleware.php中打开才生效
打开session

场景二&&场景三:

app/admin/controller/AdminBaseController.php:
创建admin基础控制器来判断管理员登录状态 LoginController继承AdminBaseController

<?php

namespace app\admin\controller;

use app\BaseController;
use think\exception\HttpResponseException;

/**
* admin基础控制器
*/
class AdminBaseController extends BaseController
{
    public $adminUser = null;

    public function initialize()
    {
        parent::initialize(); // TODO: Change the autogenerated stub
        // 判断是否登录
        if(empty($this->isLogin())){ // 未登录跳转登录界面
            return $this->redirect(url("/admin/login/index"),302);
        }
    }

    /**
     * 判断是否登录
     * @return bool
     */
    public function isLogin(){
        $this->adminUser = session(config("admin.session_admin"));
        if(empty($this->adminUser)){
            return false;
        }
        return true;
    }

    /**
     * 抛出重定向路由对象
     * @param ...$args
     * @return mixed
     */
    public function redirect(...$args){
        throw new HttpResponseException(redirect(...$args));
    }
}

登录控制器做如下修改

class LoginController extends AdminBaseController
{
    public function initialize()
    {
        if($this->isLogin()){ // 如果登录跳转主页
            return  $this->redirect(url("/admin/index/index"));
        }
    }
}

最后退出登录清空session:

<?php

namespace app\admin\controller;

class LogoutController extends AdminBaseController
{
    public function index(){
        // 清空session
        session(config("admin.session_admin"),null);
        // 跳转到登录界面
        return redirect(url("/admin/login"));
    }
}

后续持续更新!
需要资源和交流的小伙伴评论区留V!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值