登录功能
tp6登录与之前并无太大区别,我这里也是mvc结构,只是$this->error(),$this->success()
这些方法不能直接调用,要自己写,我这里都用return代替了,下面是代码,验证码的通过composer安装,这个手册上面有详细的方法,我就不过多赘述了,地址是这个验证码安装与使用,我之间也遇到一些小问题,记录在上一篇文章中tp6调用验证码遇到的一些问题,可以参考一下。记得开启session,tp6默认是关闭,下面是代码
前台页面
我这里用的是ajax提交,也可以选择传统的form表单提交
<form id="commentForm" action="##" onsubmit="return false">
<h4 class="no-margins">登录:</h4>
<p class="m-t-md">欢迎登录爱云保后台管理系统</p>
<input type="text" required class="form-control uname" name="username" placeholder="用户名" />
<input type="password" required class="form-control pword m-b" name="pwd" placeholder="密码" />
<div class="form-group" style="display:flex;align-items: center;justify-content: space-between;">
<input type="text" style="color: #333;margin-top:0px;width: 55%" name="code" required class="form-control" placeholder="验证码">
<img src="{:captcha_src()}" id="captcha-image" onclick="changeImage(this)" class="captcha" height="34" width=40% />
</div>
<button class="btn btn-success btn-block" onclick="threeFn()">登录</button>
</form>
</div>
</div>
<div class="signup-footer">
<div class="pull-left">
©本菜鸡的一点总结
</div>
</div>
</div>
</body>
<!-- 全局js -->
<script src="/static/admin/js/jquery.min.js?v=2.1.4"></script>
<script src="/static/admin/js/bootstrap.min.js?v=3.3.6"></script>
<!-- layer javascript -->
<script src="/static/admin/js/plugins/layer/layer.min.js"></script>
<script type="text/javascript">
//点击刷新验证码
function changeImage() {
var url = "{:captcha_src()}";
if(url.indexOf('?')>-1){
url = url+'&m='+Math.random()
}else{
url = url+'?m='+Math.random()
}
$("#captcha-image").attr('src',url);
}
//验证
function threeFn() {
var username = $('input[name="username"]').val();
var pwd = $('input[name="pwd"]').val();
var code = $('input[name="code"]').val();
if(username == ''||username==null||username==undefined) {
parent.layer.msg('请输入账号');return;
}else if(pwd == ''||pwd==null||pwd==undefined){
parent.layer.msg('请输入密码');return;
}else if(code == ''||code==null||code==undefined){
parent.layer.msg('请输入验证码');return;
}else{
var JsonData = {
username: username,
pwd: pwd,
code: code
};
}
//ajax提交
$.ajax({
type: "POST",//方法类型
dataType: "json",//预期服务器返回的数据类型
url: "/admin/login/login" ,//url
data: JsonData,
success: function (res) {
if(res.code==200){
parent.layer.msg('登录成功');
window.location.href = "/admin/index/index";
}else{
parent.layer.msg(res.msg);
}
changeImage();
}
});
}
</script>
后台控制器
class Login extends BaseController
{
//登录主页判断是pc或手机,可不要
public function index()
{
//判断是移动端登陆还是pc登陆
$ismobile=request()->isMobile();
if($ismobile){
// 模板输出
return View::fetch('login2');
}else{
// 模板输出
return View::fetch('login');
}
}
//登录
public function login(Request $request)
{
//判断是否post提交
if ($request->ispost()){
//获取参数
$username = input('username');
$password = input('pwd');
$verify = input('code');
//判断验证码是否正确
if (!captcha_check($verify)) {
return json(['code'=>500,'msg'=>'验证码错误']);
};
//查找数据库信息与该用户名对比
$model = SysManager::where('username',$username)->find();
//判断用户民是否存在
if (!$model){
return json(['code'=>602,'msg'=>'用户名错误']);
}
//判断用户是否停用
if($model['status'] != 1)
return json(['code'=>601,'msg'=>'该账号已停用']);
//判断密码是否正确
if(SysManager::entryPwd($model['salt'],$password)===$model['password']) {
//密码正确将用户id存入session
session('user_id', $model['id']);
//最后一次登陆时间time()函数只能获取时间戳
$model->last_time = date('Y-m-d H:i:s',time());
//登陆ip
$model->lastip = $this->request->ip();
//登陆次数
$model->login_times = $model->login_times + 1;
$model->save();
//全部验证通过登录成功
return json(['code' => 200, 'msg' => '登录成功']);
}else{
return json(['code'=>603,'msg'=>'密码错误']);
}
}
// 模板输出
return View::fetch();
}
//退出登录
public function logout()
{
//清除session,重定向到登录页
Session::delete('user_id');
return redirect("/admin/login/index");
}
}
模型
class SysManager extends Model
{
// use SoftDelete;
//数据库表名
protected $table = 'iyb_admin';
//将盐和密码存入数据库
public function setPasswordAttr($value)
{
$salt = rand(10000,99999);
$this->setAttr('salt',$salt);
$password=self::entryPwd($salt,$value);
return ['password'=>$password,'salt'=>$salt];
}
//密码加密
public static function entryPwd($salt,$value)
{
return md5($salt.$value);
}
}
以上就是简单的登录加盐功能