Files
DzzOffice/user/qqlogin.php

166 lines
6.2 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
if (!defined('IN_DZZ')) {
exit('Access Denied');
}
define('NOROBOT', TRUE);
require_once DZZ_ROOT . "./user/api_qqlogin/qqConnectAPI.php";
if (!in_array($_GET['type'], array('login', 'callback', 'newuser', 'olduser'))) {
$_GET['type'] = 'login';
}
if ($_GET['type'] == "login") {
if ($_G['setting']['qq_login'] != '1') {
showmessage('qq_log_close', $_G['siteurl']);
}
if (!empty($_G['uid'])) {//已经登录直接跳转
$param = array('username' => $_G['member']['username'], 'usergroup' => $_G['group']['grouptitle'], 'uid' => $_G['member']['uid']);
showmessage('login_succeed', $referer ? $referer : './', $param);
$msg = '';
$msg .= ' <div class="modal-body">';
$msg .= ' <div class="alert_right">';
$msg .= ' <p id="succeedmessage"></p>';
$msg .= ' <p id="succeedlocation" class="alert_btnleft">' . lang('login_succeed', $param) . '</p>';
$msg .= ' <p class="alert_btnleft"><a href="' . $referer . '" id="succeedmessage_href">' . lang('message_forward') . '</a></p>';
$msg .= ' </div>';
$msg .= ' </div>';
$msg .= ' </div><script type="text/javascript">setTimeout("window.location.href =\'' . $referer . '\';", 3000);</script></div>';
exit($msg);
}
$inurl = $_SERVER["HTTP_REFERER"];
//来路
$_SESSION['url_ref'] = $inurl;
$qc = new QC();
$qc -> qq_login();
} elseif ($_GET['type'] == 'callback') {
if (!$_SESSION['openid'] || $_GET['code']) {
$qc = new QC();
$access = $qc -> qq_callback();
$openid = $qc -> get_openid();
$_SESSION['openid'] = $openid;
$_SESSION['access'] = $access;
$qc = new QC($access, $openid);
$uinfo = $qc -> get_user_info();
$_SESSION['uinfo'] = $uinfo;
} else {
$access = $_SESSION['access'];
$openid = $_SESSION['openid'];
$uinfo = $_SESSION['uinfo'];
}
if (!DB::result_first("select COUNT(*) from %t where openid=%d", array('user_qqconnect', $openid))) {
if ($_G['setting']['qq_bind']==1){
include template('qqcallback');
exit();
}else {
dheader("Location: user.php?mod=qqlogin&type=newuser");
}
}
session_unset();
$user = C::t('user_qqconnect') -> fetch_by_openid($openid);
if ($user['status'] == -2) {
showmessage('user_stopped_please_admin');
} elseif ($_G['setting']['bbclosed'] && $user['adminid'] != 1) {
showmessage('site_closed_please_admin');
}
setloginstatus($user, $_GET['cookietime'] ? 2592000 : 0);
if ($_G['member']['lastip'] && $_G['member']['lastvisit']) {
dsetcookie('lip', $_G['member']['lastip'] . ',' . $_G['member']['lastvisit']);
}
C::t('user_status') -> update($_G['uid'], array('lastip' => $_G['clientip'], 'lastvisit' => TIMESTAMP, 'lastactivity' => TIMESTAMP));
C::t('user_login')->insert(array('uid'=>$_G['uid'],'username' => $result['ucresult']['username'], 'usergroup' => $_G['group']['grouptitle'], 'dlsb' =>$_SERVER['HTTP_USER_AGENT'], 'ip' => $_G['clientip'], 'dateline' => TIMESTAMP, 'type' => '1'));
writelog('loginlog', 'QQ登录成功');
$param = array(
'username' => $result['username'],
'usergroup' => $_G['group']['grouptitle'],
'uid' => $_G['member']['uid'],
'groupid' => $_G['groupid'],
'syn' => 0
);
$extra = array(
'showdialog' => true,
'locationtime' => true,
'extrajs' => ''
);
$loginmessage = $_G['groupid'] == 8 ? 'login_succeed_inactive_member' : 'login_succeed';
$location = $_G['groupid'] == 8 ? 'index.php?open=password' : dreferer();
if (defined('IN_MOBILE')) {
showmessage('location_login_succeed_mobile', $location, array('username' => $result['username']), array('location' => true));
} else {
showmessage($loginmessage, $location, $param, $extra);
}
} elseif ($_GET['type'] == 'newuser') {//不绑定直接使用时根据QQ登录获取的用户信息来添加用户用户名姓名使用QQ昵称邮箱和密码随机
$openid = $_SESSION['openid'];
$uinfo = $_SESSION['uinfo'];
if (empty($openid)) {
@header("Location:" . $_G[siteurl] . 'user.php?mod=qqlogin&type=callback');
exit();
} elseif (DB::result_first("select COUNT(*) from %t where openid=%d", array('user_qqconnect', $openid))) {
}
@session_unset();
$groupinfo = array();
$addorg = 0;
if ($_G['setting']['regverify']) {
$groupinfo['groupid'] = 8;
} else {
$groupinfo['groupid'] = $_G['setting']['newusergroupid'];
$addorg = 1;
}
$password = random(20);
$email = $password . '@qq.com';
$result = uc_user_register(addslashes($uinfo['nickname']), $password, $email, '', 0, '', $_G['clientip'], $addorg);
if (is_array($result)) {
$uid = $result['uid'];
$password = $result['password'];
} else {
$uid = $result;
}
if ($uid <= 0) {
if ($uid == -1) {
showmessage('profile_nickname_illegal');
} elseif ($uid == -2) {
showmessage('profile_nickname_protect');
} elseif ($uid == -3) {
showmessage('profile_nickname_duplicate');
} elseif ($uid == -4) {
showmessage('profile_email_illegal');
} elseif ($uid == -5) {
showmessage('profile_email_domain_illegal');
} elseif ($uid == -6) {
showmessage('profile_email_duplicate');
} elseif ($uid == -7) {
showmessage('profile_username_illegal');
} else {
showmessage('undefined_action');
}
} else {
C::t('user_qqconnect') -> insert_by_openid($openid, $uid, $uinfo, 1);
}
setloginstatus(array('uid' => $uid, 'username' => $result['username'], 'password' => $password, 'groupid' => $groupinfo['groupid'], ), 0);
showmessage(lang('congratulations') . $result['username'] . '' . lang('login_success'), $_G['siteurl']);
} elseif ($_GET['type'] == 'olduser') {
$userinfo = $_GET['userinfo'];
if (isemail($userinfo['email'])) {
$user = C::t('user') -> fetch_by_email($userinfo['email']);
} else {
$user = C::t('user') -> fetch_by_username($userinfo['username']);
};
if (!$user) {
showmessage('username_or_password_error', $_G['siteurl'] . 'user.php?mod=qqlogin&type=callback');
}
$md5pw = md5(md5($userinfo['pw']) . $user['salt']);
if ($md5pw == $user['password']) {
C::t('user_qqconnect') -> insert_by_openid($_SESSION['openid'], $user['uid'], $_SESSION['uinfo']);
session_unset();
setloginstatus($user, $_GET['cookietime'] ? 2592000 : 0);
showmessage(lang('congratulations') . $user['username'] . '' . lang('qq_shortcut_login_binding_success'), $_G['siteurl']);
} else {
showmessage('user_password_not_correct', $_G['siteurl'] . 'user.php?mod=qqlogin&type=callback');
}
}
?>