phpcms二次开发增加网站快速登录功能

PHPCMS原来的登录都是要跳转到登录页面去登录,这样很麻烦,今天闲来没事给自己图片网写了快速登录。

效果图

TIM截图20180420125632.jpg

具体修改如下:

找到phpcms/modules/member/下的index.php文件,在里面添加两个方法。

一个fastlogin和check_fastlogin两个方法,代码如下:

  	//快速登录
  	public function fastlogin(){
		//获取用户siteid
		$siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1;
		//定义站点id常量
		if (!defined('SITEID')) {
		   define('SITEID', $siteid);
		}
		include template('member', 'fastlogin');	
  	}
  	public function check_fastlogin(){
  	//status 1登录成功 2用户密码错误 3验证码错误 4账户锁定
		$this->_session_start();
		//获取用户siteid
		$siteid = isset($_REQUEST['siteid']) && trim($_REQUEST['siteid']) ? intval($_REQUEST['siteid']) : 1;
		//定义站点id常量
		if (!defined('SITEID')) {
		   define('SITEID', $siteid);
		}
		//验证码
		$code = isset($_POST['code']) && trim($_POST['code']) ? trim($_POST['code']) : exit('3');
		if ($_SESSION['code'] != strtolower($code)){
			exit('3');
		}
		$username = isset($_POST['username']) && is_username($_POST['username']) ? trim($_POST['username']) : exit('2');
		$password = isset($_POST['password']) && trim($_POST['password']) ? trim($_POST['password']) : exit('2');
		$r = $this->db->get_one(array('username'=>$username));
		$password = md5(md5(trim($password)).$r['encrypt']);
		if(!$r){
			exit('2');
		}elseif($r['password'] != $password){
			exit('2');
		}elseif($r['islock']){
			exit('4');
		}else{
			unset($_SESSION['connectid'], $_SESSION['from']);
			$userid = $r['userid'];
			$groupid = $r['groupid'];
			$username = $r['username'];
			$nickname = empty($r['nickname']) ? $username : $r['nickname'];
			//更新最后登录时间	
			$updatearr = array('lastip'=>ip(), 'lastdate'=>SYS_TIME);
			$this->db->update($updatearr, array('userid'=>$userid));
			if(!isset($cookietime)) {
				$get_cookietime = param::get_cookie('cookietime');
			}
			$_cookietime = $cookietime ? intval($cookietime) : ($get_cookietime ? $get_cookietime : 0);
			$cookietime = $_cookietime ? SYS_TIME + $_cookietime : 0;
			$phpcms_auth = sys_auth($userid."\t".$password, 'ENCODE', get_auth_key('login'));
			//设置cookie
			param::set_cookie('auth', $phpcms_auth, $cookietime);
			param::set_cookie('_userid', $userid, $cookietime);
			param::set_cookie('_username', $username, $cookietime);
			param::set_cookie('_groupid', $groupid, $cookietime);
			param::set_cookie('_nickname', $nickname, $cookietime);
			//param::set_cookie('cookietime', $_cookietime, $cookietime);
			exit('1');		
		}
  	}

然后我们要去这个目录class下面找到foreground.class.php文件,放行这几个方法,要不没登录的状态直接就跳转到登录页面了。

找到check_member()方法,如下图增加我们在index.php增加的两个方法

TIM截图20180420130107.jpg

因为是使用的phpcms的收藏夹检测登录状态,没登陆弹出快速登陆窗,我的收藏夹也做过更改,在相关表中添加了modelid字段,并吧原来的url字段修改位contentid字段,我吧我的贴来上来给大家参考,在根目录api下的add_favorite.php文件

<?php
/**
 * 收藏url,必须登录
 * @param id,modelid
 * @return {1:成功;2:未登录;3:缺少参数;4:已经收藏过}
 */
defined('IN_PHPCMS') or exit('No permission resources.');
$id = !empty($_GET['id']) ? intval($_GET['id']) : exit('3');
$modelid = !empty($_GET['modelid']) ? intval($_GET['modelid']) : exit('3');
//判断是否登录	
$phpcms_auth = param::get_cookie('auth');
if($phpcms_auth) {
	list($userid, $password) = explode("\t", sys_auth($phpcms_auth, 'DECODE', get_auth_key('login')));
	$userid = intval($userid);
	if($userid >0) {
	} else {
		exit('2');
	} 
} else {
	exit('2');
}

$favorite_db = pc_base::load_model('favorite_model');
$data = array('contentid'=>$id, 'modelid'=>$modelid, 'adddate'=>SYS_TIME, 'userid'=>$userid);
//根据内容id和modelid判断是否已经收藏过。
$is_exists = $favorite_db->get_one(array('contentid'=>$id, 'modelid'=>$modelid, 'userid'=>$userid));
if(!$is_exists) {
	$favorite_db->insert($data);
}else{
	exit('4');
}
exit('1');

?>

最后模版和JS代码也附上把,用的layui iframe弹窗写的

模版文件放在模版文件夹的member下新建名字为fastlogin.html,代码如下:

<div class="layui-fastlogin">
	<form method="post" action="" class="layui-form layui-form-pane">
    	<div class="layui-form-item">
			<label class="layui-form-label">用户</label>
			<div class="layui-input-block">
				<input type="text" id="username" name="username" lay-verify="required" autocomplete="off" placeholder="请输入用户名" class="layui-input" style="width: 170px;">
			</div>
		</div>
        <div class="layui-form-item">
			<label class="layui-form-label">密码</label>
			<div class="layui-input-block">
				<input type="password" id="password" name="password" lay-verify="required" autocomplete="off" placeholder="请输入密码" class="layui-input" style="width: 170px;">
			</div>
		</div>
        <div class="layui-form-item">
			<label class="layui-form-label">验证码</label>
			<div class="layui-input-block">
				<input type="text" id="code" name="code" autocomplete="off" lay-verify="required" placeholder="验证码" class="layui-input" style="width: 74px;">{form::checkcode('code_img', '4', '12', 60, 26)}
			</div>
		</div>
		<div class="layui-form-item">
			<div class="layui-input-inline" style="width:100%;">
				<input type="submit" name="dosubmit" id="dosubmit" class="layui-btn" lay-submit="" lay-filter="dosubmit" value="{L('login')}">
			</div>
		</div>
	</form>
</div>
<script>
layui.use(['form','jquery','layer'], function(){
  var form = layui.form
  ,layer = layui.layer
  ,$ = layui.jquery;
  //监听提交
  form.on('submit(dosubmit)', function(data){
  	//console.log(data);
  	$.post('/index.php?m=member&c=index&a=check_fastlogin', {username:data.field.username, password:data.field.password, code:data.field.code}, function(str){
  		if(str == 1){
  			parent.location.reload();
  		}
  		if(str == 2){
  			layer.msg('账户或密码错误!',{icon: 1, time: 500});
  		}
  		if(str == 3){
  			layer.msg('验证码错误!',{icon: 1, time: 500});
  		}
   		if(str == 4){
  			layer.msg('此账户已锁定!',{icon: 1, time: 500});
  		} 		
  	});
  	return false;
  })
});
</script>

然后是内容页JS文件

function add_favorite(id,modelid){
layui.use(['layer','jquery'], function(){
  layer = layui.layer
  ,$ = layui.jquery;
    $.get('/api.php?op=add_favorite', {id:id, modelid:modelid},function(data){
    if(data==1){
      layer.msg('收藏成功!', {
      icon: 1,
      time: 2000 //2秒关闭(如果不配置,默认是3秒)
      });
    }
    if(data==2){
      layer.open({
        type: 2,
        title: '快速登录',
        shadeClose: true,
        shade: 0.8,
        area: ['320px', '296px'],
        move:false,
        scrollbar: false,
        content: '/index.php?m=member&c=index&a=fastlogin&forward='+encodeURIComponent(location.href)+'&siteid=1'
      });
    }
    if(data==4){
      layer.msg('已添加过收藏,请勿反复添加!', {
      icon: 2,
      time: 2000 //2秒关闭(如果不配置,默认是3秒)
      });
    }
    });
  });
}

添加收藏的地方改成这样就行了。代码如下:

<a onclick="add_favorite($id,$modelid);" href="javascript:;" ></a>


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://sulao.cn/post/468.html