阿里云

免费个人博客开发-编写登录功能

本节我们将实现以下功能:创建并连接数据库、创建运营表、创建model类、编写login模板和编写登录功能,下面开始写bug


一、创建并连接数据库


使用Navicat Premium创建一个连接本地数据库,并创建一个数据库,我的库名称为:local_blog_com。

连接数据库:

<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------

return [
    // 数据库类型
    'type'            => 'mysql',
    // 服务器地址
    'hostname'        => '127.0.0.1',
    // 数据库名
    'database'        => 'local_blog_com',
    // 用户名
    'username'        => 'root',
    // 密码
    'password'        => 'shenlin',
    // 端口
    'hostport'        => '3306',
    // 连接dsn
    'dsn'             => '',
    // 数据库连接参数
    'params'          => [],
    // 数据库编码默认采用utf8
    'charset'         => 'utf8',
    // 数据库表前缀
    'prefix'          => 'blog_',
    // 数据库调试模式
    'debug'           => true,
    // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
    'deploy'          => 0,
    // 数据库读写是否分离 主从式有效
    'rw_separate'     => false,
    // 读写分离后 主服务器数量
    'master_num'      => 1,
    // 指定从服务器序号
    'slave_no'        => '',
    // 自动读取主库数据
    'read_master'     => false,
    // 是否严格检查字段是否存在
    'fields_strict'   => true,
    // 数据集返回类型
    'resultset_type'  => 'array',
    // 自动写入时间戳字段
    'auto_timestamp'  => true,
    // 时间字段取出后的默认时间格式
    'datetime_format' => 'Y-m-d H:i:s',
    // 是否需要进行SQL性能分析
    'sql_explain'     => false,
    // Builder类
    'builder'         => '',
    // Query类
    'query'           => '\\think\\db\\Query',
    // 是否需要断线重连
    'break_reconnect' => false,
    // 断线标识字符串
    'break_match_str' => [],
];


二、创建运营表


Navicat


使用 Navicat 在此数据库内创建blog_user表,字段如下:

/*
Navicat MySQL Data Transfer

Source Server         : 本地数据库
Source Server Version : 50554
Source Host           : localhost:3306
Source Database       : local_blog_com

Target Server Type    : MYSQL
Target Server Version : 50554
File Encoding         : 65001

Date: 2019-05-10 20:32:16
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for blog_user
-- ----------------------------
DROP TABLE IF EXISTS `blog_user`;
CREATE TABLE `blog_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `create_time` int(11) DEFAULT NULL COMMENT '创建时间',
  `update_time` int(11) DEFAULT NULL COMMENT '修改时间',
  `user_name` varchar(32) NOT NULL COMMENT '用户名',
  `user_pass` varchar(32) NOT NULL COMMENT '密码',
  `user_status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0:正常1:冻结',
  `user_phone` varchar(32) DEFAULT NULL COMMENT '手机号',
  `qq_token` varchar(32) DEFAULT NULL COMMENT 'QQtoken',
  `wx_token` varchar(32) DEFAULT NULL COMMENT '微信token',
  `bd_token` varchar(32) DEFAULT NULL COMMENT '百度token',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='运营表';


三、创建model类


我们将编写获取列表(分页)、获取列表、获取单数据、添加数据、修改数据、删除数据;


数据库类

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/5/10 0010
 * Time: 下午 8:33
 */
namespace app\common\model;

use think\Model;

class User extends Model
{
    /**
     * 数据分页列表
     * @param $where
     * @param string $field
     * @param string $order
     * @param int $pageNum
     * @return \think\Paginator
     * @throws \think\exception\DbException
     */
    public function getPageList($where,$field = '*',$order = 'id desc',$pageNum = 15)
    {
        $data = $this->where($where)->field($field)->order($order)->paginate($pageNum);
        return $data;
    }

    /**
     * 数据列表
     * @param $where
     * @param string $field
     * @param string $order
     * @return array|\PDOStatement|string|\think\Collection
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getDataList($where,$field = '*',$order = 'id desc')
    {
        $data = $this->where($where)->field($field)->order($order)->select();
        return $data;
    }

    /**
     * 获取单条数据
     * @param $where
     * @param string $field
     * @return array|\PDOStatement|string|Model|null
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getDataOne($where,$field = '*')
    {
        $data = $this->where($where)->field($field)->find();
        return $data;
    }

    /**
     * 添加数据
     * @param $data
     * @return int|string
     */
    public function getAddData($data)
    {
        $res = $this->save($data);
        return $res;
    }

    /**
     * 修改数据
     * @param $where
     * @param $data
     * @return int|string
     * @throws \think\Exception
     * @throws \think\exception\PDOException
     */
    public function getUpdateData($where,$data)
    {
        $res = $this->where($where)->update($data);
        return $res;
    }

    /**
     * 删除数据
     * @param $id
     * @return bool
     * @throws \Exception
     */
    public function getDeleteData($id)
    {
        if(!$id){
            return false;
        }
        $res = $this->delete($id);
        return $res;
    }
}


四、编写login模板


代码请参考码云提交编码


码云


五、编写登录功能

<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2019/5/9 0009
 * Time: 下午 9:38
 */

namespace app\admin\controller;

use app\common\model\User;
use think\captcha\Captcha;
use think\Controller;

class Login extends Controller
{
    protected $user_model;

    public function __construct()
    {
        parent::__construct();
        $this->user_model = new User();
    }

    /**
     * 登录页面
     * @return \think\response\View
     */
    public function index()
    {
        return view();
    }

    /**
     * 登录处理
     * @throws \think\db\exception\DataNotFoundException
     * @throws \think\db\exception\ModelNotFoundException
     * @throws \think\exception\DbException
     */
    public function getLogin()
    {
        $userName = input('post.userName'); //账户
        $userPass = input('post.userPass'); //密码
        $code     = input('post.code'); //验证码
        if(!captcha_check($code)){
            // 验证失败
            $this->error('验证码错误');
        };
        if(!$userName || !$userPass){
            //数据不完整
            $this->error('请填写账号或密码');
        }
        $res = $this->user_model->getDataOne(['user_name'=>$userName],'user_status,user_pass');
        if(!$res){
            $this->error('账号或密码错误');
        }
        if($res['user_pass'] !== md5($userPass)){
            $this->error('账号或密码错误');
        }
        if($res['user_status'] == 2){
            $this->error('账户已冻结');
        }
        //记录session
        session('userName',$userName,'thinkBlog');
        $this->success('登录成功','/admin');
    }

    /**
     * 验证码
     * @return mixed
     */
    public function code()
    {
        $config  = [
            // 验证码字体大小
            'fontSize' => 30,
            // 验证码位数
            'length'   => 3,
            // 关闭验证码杂点
            'useNoise' => false,
        ];
        $captcha = new Captcha($config);
        return $captcha->entry();
    }
}

六、注意事项


1、验证码使用compoer进行安装,在根目录(composer.json同级目录)运行命令:

composer require topthink/think-captcha


2、自动写入创建和更新的时间戳字段,需要在database.php中开启,设置如下:

// 自动写入时间戳字段
'auto_timestamp'  => true,


3、相关静态文件未写入文章,请前往码云下载;

喜欢就点个赞吧