You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

470 lines
17 KiB

<?php
namespace apps\user\controllers;
use apps\base\controllers\FrontendController;
use vendor\Verify;
class LoginController extends FrontendController {
public $user;
public $user_id;
/**
* 构造函数
*/
public function __construct()
{
parent::__construct();
L(require (ROOT_PATH . 'source/language/' . C('shop.lang') . '/user.php'));
$file = array(
'passport',
'clips',
);
$this->load_helper($file);
// 属性赋值
$this->user_id = $_SESSION['user_id'];
}
/**
* 用户登录
*/
public function actionIndex()
{
// 是否为post提交
if(IS_POST){
$username = isset($_POST['username']) ? trim($_POST['username']) : '';
$password = isset($_POST['password']) ? trim($_POST['password']) : '';
$back_act = isset($_POST['back_act']) ? trim($_POST['back_act']) : '';
if(strpos($username,'@') && strpos($username,'.')){
$login = $this->db->getOne("SELECT user_name FROM {pre}users WHERE email='$username'");
if($login){
$username = $login;
}
}else if($this->isMobile($username)){
$login = $this->db->getOne("SELECT user_name FROM {pre}users WHERE mobile_phone='$username'");
if($login){
$username = $login;
}
}
var_dump($this->users->login($username, $password));
if ($this->users->login($username, $password))
{
update_user_info();
recalculate_price();
$ucdata = isset($this->users->ucdata)? $this->users->ucdata : '';
$back_act = empty($back_act) ? U('user/index/index') : $back_act;
var_dump($ucdata);
exit();
show_message(L('login_success') . $ucdata , array(L('back_up_page'), L('profile_lnk')), array($back_act,U('user/index/index')), 'success');
}
else
{
$_SESSION['login_fail'] ++ ;
show_message(L('login_failure'), L('relogin_lnk'), U('user/login/index'), 'fail');
}
exit;
}
// 获取返回地址
$back_act = urldecode(I('back_act'));
if (empty($back_act))
{
if (empty($back_act) && isset($GLOBALS['_SERVER']['HTTP_REFERER']))
{
$back_act = strpos($GLOBALS['_SERVER']['HTTP_REFERER'], U('user/index/index')) ? U('user/index/index') : $GLOBALS['_SERVER']['HTTP_REFERER'];
}
else
{
$back_act = U('user/index/index') ;
}
}
$this->assign('back_act', $back_act);
$this->assign('page_title','用户登录');
$this->assign('passport_js',L('passport_js'));
$this->display('user_login');
}
/**
* 找回密码
*/
public function actionGetPasswordPhone()
{
$enabled_sms = I('enabled_sms');
// 手机找回密码处理
if (IS_POST) {
if ($enabled_sms == 1) {
$mobile = I('mobile', '');
$sms_code = I('sms_code', '');
if ($mobile != $_SESSION['sms_mobile'] or $sms_code != $_SESSION['sms_mobile_code']) {
show_message('手机验证码输入错误。');
}
$user_id = $this->db->getOne("SELECT user_id FROM {pre}users WHERE mobile_phone = " . $mobile);
if(empty($user_id)){
show_message('手机号不存在。');
}
$this->assign('uid', $user_id);
$this->display('user_forget_password');
exit();
}
// 邮箱找回密码
if ($enabled_sms == 2) {
$this->send_pwd_email();
exit();
}
}
if ($enabled_sms == 2) {
$this->assign('title', L('reset_password'));
$this->display('user_forget_email');
exit;
}
$this->assign('page_title', L('get_password'));
$this->display('user_forget_tel');
}
/*
* 找回密码
*/
public function actionForgetPassword()
{
if (IS_POST) {
$password = I('password', '');
$uid = I('uid', '');
if (empty($password)) {
show_message("密码不能为空");
}
if ($uid<1) {
show_message("操作有误");
}
$sql = "SELECT user_name FROM {pre}users WHERE user_id=".$uid;
$user_name = $this->db->getOne($sql);
if ($this->users->edit_user(array('username'=>$user_name, 'old_password'=>$password, 'password'=>$password), 0)){
$sql="UPDATE {pre}users SET `ec_salt`='0' WHERE user_id= '".$uid."'";
$this->db->query($sql);
unset($_SESSION['user_id']);
unset($_SESSION['user_name']);
show_message('修改成功 ' , '返回登录页面', U('user/login/index'), 'success');
}
show_message('修改失败' , '继续找回密码', U('user/login/get_password_phone',array('enabled_sms'=>2)), 'info');
}
}
/**
* 发送密码修改确认邮件
*/
public function send_pwd_email()
{
// 初始化会员用户名和邮件地址
$user_name = I('user_name', '');
$email = I('email', '');
$user_name = $this->db->getOne("SELECT user_name FROM {pre}users WHERE email='$email'");
// 用户信息
$user_info = $this->users->get_user_info($user_name);
if ($user_info['user_name']==$user_name && $user_info['email'] == $email) {
// 生成code
$code = md5($user_info['user_id'] . C('hash_code') . $user_info['reg_time']);
// 发送邮件的函数
if (send_pwd_email($user_info['user_id'], $user_name, $email, $code)) {
$this->assign('data',$user_info['email']);
$this->assign('code',$_SESSION['maildata']['code']);
$this->display('user_forget_code');
} else {
// 发送邮件出错
show_message(L('fail_send_password'), L('back_page_up'), U('get_password_phone',array('enabled_sms'=>2)), 'info');
}
} else {
// 用户名与邮件地址不匹配
show_message(L('username_no_email'), L('back_page_up'), U('get_password_phone',array('enabled_sms'=>2)), 'info');
}
}
/*
**邮件修改密码验证
*/
function actionEditForgetMail(){
if(IS_POST){
$email=I('email','');
$code =md5(I('email_code',''));
if($code != $_SESSION['maildata']['code']){
show_message('验证码错误');
}
if(empty($email)){
show_message('邮箱不匹配');
}
$this->assign('uid',$this->db->getOne("SELECT user_id FROM {pre}users WHERE email='$email'"));
$this->display('user_forget_password');
}
}
/**
* 修改密码
*/
public function actionEditPassword()
{
// 修改密码处理
if (IS_POST) {
$old_password = I('old_password', null);
$new_password = I('userpassword2', '');
$user_id = I('uid', $this->user_id);
$code = I('code', ''); // 邮件code
$mobile = I('mobile', ''); // 手机号
if (strlen($new_password) < 6) {
show_message("密码不能小于6位");
}
$user_info = $this->users->get_profile_by_id($user_id); // 论坛记录
// 短信找回,邮件找回,问题找回,登录修改密码
if ((! empty($mobile) && base64_encode($user_info['mobiles']) == $mobile) || ($user_info && (! empty($code) && md5($user_info['user_id'] . C('hash_code') . $user_info['reg_time']) == $code)) || ($_SESSION['user_id'] > 0 && $_SESSION['user_id'] == $user_id && $this->load->user->check_user($_SESSION['user_name'], $old_password))) {
echo 'asdas';
exit();
if ($this->load->user->edit_user(array(
'username' => ((empty($code) && empty($mobile) && empty($question)) ? $_SESSION['user_name'] : $user_info['user_name']),
'old_password' => $old_password,
'password' => $new_password
), empty($code) ? 0 : 1)) {
echo 'asdas';
exit();
$data['ec_salt'] = 0;
$where['user_id'] = $user_id;
$this->db->table('users')
->data($data)
->where($where)
->update();
echo 'asdas';
exit();
$this->load->user->logout();
show_message(L('edit_password_success'), L('relogin_lnk'), url('login'), 'info');
} else {
show_message(L('edit_password_failure'), L('back_page_up'), '', 'info');
}
} else {
show_message(L('edit_password_failure'), L('back_page_up'), '', 'info');
}
}
// 显示修改密码页面
if (isset($_SESSION['user_id']) && $_SESSION['user_id'] > 0) {
$this->assign('title', L('edit_password'));
// 判断登录方式
if ($this->is_third_user($_SESSION['user_id'])) {
$this->assign('is_third', 1);
}
$this->assign('page_title', '修改密码');
$this->display();
} else {
$this->redirect(url('login', array(
'referer' => urlencode(url($this->action))
)));
}
}
/**
* 退出
*/
public function actionLogout()
{
if ((! isset($this->back_act) || empty($this->back_act)) && isset($_SERVER['HTTP_REFERER'])) {
$this->back_act = strpos($GLOBALS['_SERVER']['HTTP_REFERER'], 'c=user') ? url('index') : $GLOBALS['_SERVER']['HTTP_REFERER'];
} else {
$this->back_act = U('user/login/index');
}
$this->users->logout();
show_message(L('logout'), array(
L('back_up_page'),
L('back_home_lnk')
), array(
$this->back_act,
U('site/index/index')
), 'success');
}
/**
* 清空浏览历史
*/
public function clear_history()
{
// ajax请求
if (IS_AJAX && IS_AJAX) {
setcookie('ECS[history]', '', 1);
echo json_encode(array('status' => 1));
} else {
echo json_encode(array('status' => 0));
}
}
/**
* 用户注册
*/
public function actionRegister(){
if(IS_POST){
if(I('enabled_sms') == 1){
//$username = isset($_POST['username']) ? trim($_POST['username']) : '';
$username = isset($_POST['mobile']) ? trim($_POST['mobile']) : '';
$mobile = isset($_POST['mobile']) ? trim($_POST['mobile']) : '';
$password = isset($_POST['smspassword']) ? trim($_POST['smspassword']) : '';
$sms_code = isset($_POST['mobile_code']) ? trim($_POST['mobile_code']) : '';
$repassword = isset($_POST['repassword']) ? trim($_POST['repassword']) : '';
$back_act = isset($_POST['back_act']) ? trim($_POST['back_act']) : '';
if ($mobile != $_SESSION['sms_mobile'] or $sms_code != $_SESSION['sms_mobile_code']) {
show_message('手机验证码输入错误。');
}
if (strlen($username) < 3)
{
show_message(L('passport_js.username_shorter'));
}
if (strlen($password) < 6)
{
show_message(L('passport_js.password_shorter'));
}
if (strpos($password, ' ') > 0)
{
show_message(L('passwd_balnk'));
}
if ($password != $repassword)
{
show_message('两次密码输入不一致');
}
$email = $username.'@qq.com';
$other = array(
'mobile_phone' => $mobile,
);
}elseif(I('enabled_sms') == 2){
$username = isset($_POST['username']) ? trim($_POST['username']) : '';
$email = isset($_POST['email']) ? trim($_POST['email']) : '';
$password = isset($_POST['password']) ? trim($_POST['password']) : '';
$repassword = isset($_POST['confirm_password']) ? trim($_POST['confirm_password']) : '';
$back_act = isset($_POST['back_act']) ? trim($_POST['back_act']) : '';
$passport_js = L("passport_js");
if (strlen($username) < 3)
{
show_message($passport_js['username_shorter']);
}
if (strlen($password) < 6)
{
show_message(L('passport_js.password_shorter'));
}
if (strpos($password, ' ') > 0)
{
show_message(L('passwd_balnk'));
}
if ($password != $repassword)
{
show_message('两次密码输入不一致');
}
$other = array();
}
if (register($username, $password, $email, $other) !== false)
{
/* 判断是否需要自动发送注册邮件 */
if (C('member_email_validate') && C('send_verify_email'))
{
send_regiter_hash($_SESSION['user_id']);
}
$ucdata = isset($this->users->ucdata)? $this->users->ucdata : '';
show_message(sprintf(L('register_success'), $username.$ucdata), L('profile_lnk'), U('user/index/index'), 'success');
}
else
{
if($this->db->getOne("SELECT count(user_name) as a FROM {pre}users WHERE user_name='".$username."'")){
$error = '用户名已注册';
}elseif($this->db->getOne("SELECT count(email) as a FROM {pre}users WHERE email='".$email."'")){
$error = '邮箱已注册';
}
show_message('注册失败 '.$error,'' ,U('user/login/register'),'fail');
}
}
if ((!isset($back_act)||empty($back_act)) && isset($GLOBALS['_SERVER']['HTTP_REFERER']))
{
$back_act = strpos($GLOBALS['_SERVER']['HTTP_REFERER'], 'user.php') ? './index.php' : $GLOBALS['_SERVER']['HTTP_REFERER'];
}
/* 验证码相关设置 */
if ((intval(C('shop.captcha')) & CAPTCHA_REGISTER) && gd_version() > 0)
{
$this->assign('enabled_captcha', 1);
$this->assign('rand', mt_rand());
}
$_SESSION['sms_code'] = $sms_code = md5(mt_rand(1000, 9999));
$this->assign('sms_code', $sms_code);
$this->assign('flag','register');
$this->assign('back_act', $back_act);
$this->assign('page_title','注册用户');
$this->assign('show',$GLOBALS['_CFG']['sms_signin']);
$this->display('user_register');
}
/**
* 验证验证码
*/
public function actionCheckcode()
{
if (IS_AJAX) {
$verify = new Verify();
$code = I('code');
$code = $verify->check($code);
if ($code == true) {
$code = 1;
echo json_encode($code);
} else {
$code = 0;
echo json_encode($code);
}
}
}
/**
* 生成验证码
*/
public function actionVerify()
{
$verify = new Verify();
$this->assign('code', $verify->entry());
}
function isMobile($mobile) {
if (!is_numeric($mobile)) {
return false;
}
return preg_match('#^13[\d]{9}$|^14[5,7]{1}\d{8}$|^15[^4]{1}\d{8}$|^17[0,6,7,8]{1}\d{8}$|^18[\d]{9}$#', $mobile) ? true : false;
}
/**
* 验证是否登录
*/
public function actionchecklogin(){
if(!$this->user_id){
$url = urlencode(__HOST__ . $_SERVER['REQUEST_URI']);
if(IS_POST) {
$url = urlencode($_SERVER['HTTP_REFERER']);
}
ecs_header("Location: ".U('user/login/index',array('back_act'=>$url)));
exit;
}
}
}