| Server IP : 112.84.131.71 / Your IP : 43.159.78.200 Web Server : nginx/1.28.0 System : Linux 1763701629066 6.8.0-53-generic #55-Ubuntu SMP PREEMPT_DYNAMIC Fri Jan 17 15:37:52 UTC 2025 x86_64 User : www ( 1001) PHP Version : 8.2.28 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /www/wwwroot/www.lengcat.cn/wp-content/themes/onenav/inc/ |
Upload File : |
<?php
/*
* @Theme Name:One Nav
* @Theme URI:https://www.iotheme.cn/
* @Author: iowen
* @Author URI: https://www.iowen.cn/
* @Date: 2021-06-03 08:55:58
* @LastEditors: iowen
* @LastEditTime: 2025-03-26 19:36:57
* @FilePath: /onenav/inc/open-login.php
* @Description:
*/
if ( ! defined( 'ABSPATH' ) ) { exit; }
require_once get_theme_file_path('/inc/classes/open.wechat.gzh.class.php');
require_once get_theme_file_path('/inc/classes/open.prk.oauth.class.php');
//session_write_close()
//检测IO_ID是否重复
function userioid_exists( $ioid ) {
global $wpdb;
$user = $wpdb->get_row(
$wpdb->prepare(
"SELECT * FROM $wpdb->users WHERE io_id = %s LIMIT 1",
$ioid
)
);
if ( ! $user ) {
return false;
}else{
return $user->ID;
}
}
//添加 io_id
add_action('user_register', 'io_register_extra_fields');
function io_register_extra_fields($user_id) {
global $wpdb;
$prename = 'io';
$extname = rand(100000,999998);
$ioid = $prename.$extname;
if(userioid_exists($ioid)){
while(userioid_exists($ioid)){ $extname++; }
$ioid = $prename.$extname;
}
$wpdb->query("UPDATE $wpdb->users SET io_id = '$ioid' WHERE ID = '$user_id'");
}
/**
* 社交登录按钮
* @return string
*/
function get_social_login_btn()
{
$buttons = '';
$datas = get_social_type_data();
$weixin_type = io_get_option('open_weixin_gzh_key', 'gzh', 'type');
foreach ($datas as $data) {
$type = $data['type'];
$name = $data['name'];
$icon = '<i class="iconfont ' . $data['icon'] . '"></i>';
if ('alipay' == $type) {
if (wp_is_mobile() && !strpos($_SERVER['HTTP_USER_AGENT'], 'Alipay')) {
continue;
}
//移动端并且不是支付宝APP不显示支付宝
}
$href = io_get_oauth_login_url($type);
if ($href) {
$_class = $data['class'];
if ('weixin_gzh' === $type) {
$_class .= ' qrcode-signin weixin-' . $weixin_type;
}
$buttons .= '<a href="' . esc_url($href) . '" title="' . $name . __('登录','i_theme').'" class="open-login ' . $_class . '">' . $icon . '</a>';
}
}
$buttons .= get_prk_btn_html();
return $buttons;
}
function openloginFormButton(){
if ( isset($_GET['action']) &&'register' === $_GET['action'])
return;
$btn = get_social_login_btn();
if(empty($btn)) return;
echo '<div id="openlogin-box" class="openlogin-box text-center">';
echo '<span class="social-separator separator text-muted text-xs mb-3">'.__('社交帐号登录','i_theme').'</span>';
echo $btn;
echo '</div>';
if (io_get_oauth_login_url('weixin_gzh')) {
$type = io_get_option('open_weixin_gzh_key', 'gzh', 'type');
if(!(io_is_wechat_app() && 'gzh'===$type))
get_weixin_qr_js();
}
}
add_filter('io_login_form', 'openloginFormButton');
/**
* 判断用户是否已经绑定了开放平台账户.
*
* @param string $type
* @param int $user_id
*
* @return bool|string
*/
function io_has_connect($type = 'qq', $user_id = 0){
$user_id = $user_id ?: get_current_user_id();
if($type){
if ('weixin_gzh' == $type) {
$type = 'wechat_'.io_get_option('open_weixin_gzh_key', 'gzh', 'type');
}
return get_user_meta($user_id, $type.'_openid', true);
}
return false;
}
/**
* 获取社交登录名称
* @param mixed $type
* @return mixed
*/
function get_open_login_name($type){
$datas = get_social_type_data();
if('wx'===$type){
$type = 'wechat';
}
if('sina'===$type){
$type = 'weibo';
}
return $datas[$type]['name'];
}
function get_prk_btn_html(){
$btn = '';
if(io_get_option('open_prk',false)){
$list = io_get_option('open_prk_list','');
if(is_array($list)){
foreach($list as $type){
$ico = $type;
if('wx'===$type){
$ico = 'wechat';
}
if('sina'===$type){
$ico = 'weibo';
}
$btn .= '<a href="'.get_theme_file_uri('/inc/auth/prk.php').'?type='.$type.'&loginurl='.(isset($_REQUEST["redirect_to"])?$_REQUEST["redirect_to"]:io_get_option('open_login_url','')).'" title="'.sprintf(__('%s快速登录','i_theme'),get_open_login_name($type)).'" rel="nofollow" class="open-login prk-login openlogin-'.$ico.'-a"><i class="iconfont icon-'.$ico.'"></i></a>';
}
}
}
return $btn;
}
/**
* 获取社交头像列表
* @param mixed $current_user
* @return array
*/
function get_open_avatar_list($current_user){
$open_avatar = array();
if(isset($current_user->qq_avatar)){
$open_avatar['qq'] = $current_user->qq_avatar;
}
if(isset($current_user->wechat_avatar)){
$open_avatar['wechat'] = $current_user->wechat_avatar;
}
if(isset($current_user->wechat_gzh_avatar)){
$open_avatar['wechat_gzh'] = $current_user->wechat_gzh_avatar;
}
if(isset($current_user->wx_avatar)){
$open_avatar['wx'] = $current_user->wx_avatar;
}
if(isset($current_user->alipay_avatar)){
$open_avatar['alipay'] = $current_user->alipay_avatar;
}
if(isset($current_user->sina_avatar)){
$open_avatar['sina'] = $current_user->sina_avatar;
}
if(isset($current_user->baidu_avatar)){
$open_avatar['baidu'] = $current_user->baidu_avatar;
}
if(isset($current_user->huawei_avatar)){
$open_avatar['huawei'] = $current_user->huawei_avatar;
}
if(isset($current_user->google_avatar)){
$open_avatar['google'] = $current_user->google_avatar;
}
if(isset($current_user->microsoft_avatar)){
$open_avatar['microsoft'] = $current_user->microsoft_avatar;
}
if(isset($current_user->facebook_avatar)){
$open_avatar['facebook'] = $current_user->facebook_avatar;
}
if(isset($current_user->twitter_avatar)){
$open_avatar['twitter'] = $current_user->twitter_avatar;
}
if(isset($current_user->dingtalk_avatar)){
$open_avatar['dingtalk'] = $current_user->dingtalk_avatar;
}
if(isset($current_user->github_avatar)){
$open_avatar['github'] = $current_user->github_avatar;
}
if(isset($current_user->gitee_avatar)){
$open_avatar['gitee'] = $current_user->gitee_avatar;
}
return apply_filters('io_open_login_avatar_list_filters', $open_avatar);
}
/**
* filter nickname
* @param mixed $nickname
* @return string
*/
function io_filter_nickname($nickname){
$nickname = preg_replace('/[\x{1F600}-\x{1F64F}]/u', '', $nickname);
$nickname = preg_replace('/[\x{1F300}-\x{1F5FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{1F680}-\x{1F6FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{2600}-\x{26FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{2700}-\x{27BF}]/u', '', $nickname);
$nickname = str_replace(array('"','\''), '', $nickname);
$nickname = preg_replace_callback( '/./u', function (array $match) {
return strlen($match[0]) >= 4 ? '' : $match[0];
}, $nickname);
return addslashes(trim($nickname));
}
/**
* 处理返回数据,更新用户资料
*/
function io_oauth_update_user($args, $is_weixin_dyh = false)
{
/** 需求数据明细 */
$defaults = array(
'type' => '',
'openid' => '',
'name' => '',
'avatar' => '',
'description' => '',
'getUserInfo' => array(),
'rurl' => '',
);
$_rurl = isset($args['rurl']) && !empty($args['rurl']) ? $args['rurl'] : esc_url(home_url());//get_author_posts_url($current_user_id)//重定向链接到用户中心
$args = wp_parse_args((array) $args, $defaults);
// 初始化信息
$openid_meta_key = $args['type'] . '_openid';
$openid = $args['openid'];
$return_data = array(
'redirect_url' => '',
'msg' => '',
'bind' => false,
'error' => true,
);
global $wpdb, $current_user;
// 查询该openid是否已存在
$user_exist = $wpdb->get_var($wpdb->prepare("SELECT user_id FROM $wpdb->usermeta WHERE meta_key=%s AND meta_value=%s", $openid_meta_key, $openid));
// 查询已登录用户
$current_user_id = get_current_user_id();
//如果已经登录,且该openid已经存在
if ($current_user_id && isset($user_exist) && $current_user_id != $user_exist) {
$return_data['msg'] = __('绑定失败,可能之前已有其他账号绑定,请先登录并解绑。','i_theme');
return $return_data;
}
if (isset($user_exist) && (int) $user_exist > 0) {
// 该开放平台账号已连接过WP系统,再次使用它直接登录
$user_exist = (int) $user_exist;
//登录
$user = get_user_by('id', $user_exist);
wp_set_current_user($user_exist);
wp_set_auth_cookie($user_exist, true);
do_action('wp_login', $user->user_login, $user);
//绑定尝试社交登录的账号
io_update_oauth_data($user_exist);
$return_data['redirect_url'] = $_rurl;
$return_data['error'] = false;
} elseif ($current_user_id) {
// 已经登录,但openid未占用,则绑定,更新用户字段
// 更新用户mate
$args['user_id'] = $current_user_id;
//绑定用户不更新以下数据
$args['name'] = '';
$args['description'] = '';
io_oauth_update_user_meta($args);
// 准备返回数据
$return_data['redirect_url'] = $_rurl;
$return_data['error'] = false;
} else {
if(io_is_close_register()){
$return_data['msg'] = __('禁止注册','i_theme');
return $return_data;
}
// 既未登录且openid未占用,则新建用户并绑定
if(io_user_center_enable() && io_get_option('bind_email','must')=='must'){
//添加到临时数据
if(!session_id()) session_start();
$_SESSION['temp_oauth'] = maybe_serialize($args);
if($is_weixin_dyh){
$return_data['redirect_url'] = $_rurl;
$return_data['bind'] = true;
$return_data['error'] = false;
return $return_data;
}else{
wp_safe_redirect(home_url().'/login/?action=bind&redirect_to='.$args['rurl']);
exit();
}
}
$prename = 'io';
$extname = rand(1000000,9999998);
$login_name = $prename.$extname;
if(username_exists($login_name)){
while(username_exists($login_name)){ $extname++; }
$login_name = $prename.$extname;
}
$user_pass = wp_generate_password();
$user_id = wp_create_user($login_name, $user_pass);
if (is_wp_error($user_id)) {
//新建用户出错
$return_data['msg'] = $user_id->get_error_message();
} else {
//新建用户成功
update_user_meta($user_id, 'oauth_new', $args['type']);
/**标记为系统新建用户 */
//更新用户mate
$args['user_id'] = $user_id;
$args['login_name'] = $login_name;
io_oauth_update_user_meta($args, true);
//登录
$user = get_user_by('id', $user_id);
wp_set_current_user($user_id, $user->user_login);
wp_set_auth_cookie($user_id, true);
do_action('wp_login', $user->user_login, $user);
// 准备返回数据
$return_data['redirect_url'] = $_rurl;
$return_data['bind'] = true;
$return_data['error'] = false;
}
}
return $return_data;
}
/**
* 更新第三方账号数据
* @param mixed $args
* @param mixed $is_new
* @return void
*/
function io_oauth_update_user_meta($args, $is_new = false)
{
/** 需求数据明细 */
$defaults = array(
'user_id' => '',
'type' => '',
'openid' => '',
'name' => '',
'login_name' => '',
'avatar' => '',
'description' => '',
'getUserInfo' => array(),
);
$args = wp_parse_args((array) $args, $defaults);
update_user_meta($args['user_id'], $args['type'] . '_openid', $args['openid']);
update_user_meta($args['user_id'], $args['type'] . '_getUserInfo', $args['getUserInfo']);
update_user_meta($args['user_id'], 'name_change', 1);
//自定义头像,无则添加
$custom_avatar = get_user_meta($args['user_id'], 'custom_avatar', true);
if ($args['avatar'] && !$custom_avatar) {
update_user_meta($args['user_id'], 'custom_avatar', $args['avatar']);
}
if($args['avatar']){
update_user_meta($args['user_id'], $args['type'] . '_avatar', $args['avatar']);
}
//自定义简介,无则添加
$description = get_user_meta($args['user_id'], 'description', true);
if ($args['description'] && !$description) {
update_user_meta($args['user_id'], 'description', $args['description']);
}
if ($is_new) {
if($args['avatar'])
update_user_meta($args['user_id'], 'avatar_type', $args['type']);
else
update_user_meta($args['user_id'], 'avatar_type', 'letter');
//新建用户,更新display_name
$nickname = trim($args['name']);
if (is_username_legal($nickname)['error']) {
//判断用户名是否合法,将io换成用户作为昵称
$nickname = $args['login_name'] ? str_replace('io', __('用户','i_theme'), $args['login_name']) : __('用户','i_theme') . rand(1000000,9999998);
}
$user_datas = array(
'ID' => $args['user_id'],
'display_name' => $nickname,
'nickname' => $nickname,
);
wp_update_user($user_datas);
}
}
/**
* 社交登录后执行
* @description:
* @param array $oauth_result 社交登录结果
* @param bool $is_redirect 是否重定向
* @return
*/
function io_oauth_login_after_execute($oauth_result, $is_redirect = true)
{
if ($oauth_result['error']) {
wp_die('<meta charset="UTF-8" />' . ($oauth_result['msg'] ? $oauth_result['msg'] : '处理失败'));
exit;
} else {
$rurl = isset($oauth_result['rurl']) && !empty($oauth_result['rurl']) ? $oauth_result['rurl'] : $oauth_result['redirect_url'];
if (io_user_center_enable() && $oauth_result['bind'] && io_get_option('bind_email', 'bind') === 'must') {
$rurl = home_url() . '/login/?action=bind&redirect_to=' . $rurl;
}
if ($is_redirect) {
wp_safe_redirect($rurl);
exit;
} else {
return array(
'status' => true,
'rurl' => $rurl,
);
}
}
}
/**
* 第一次社交登录时绑定到已有账号
* @param int $user_id 旧账号 ID
* @return null
*/
function io_update_oauth_data($user_id){
if(!session_id()) session_start();
if( isset($_SESSION['temp_oauth']) && !empty($_SESSION['temp_oauth'])){
$args = maybe_unserialize($_SESSION['temp_oauth']);
$args['user_id'] = $user_id;
//绑定用户不更新以下数据
$args['name'] = '';
$args['description'] = '';
if (!io_has_connect($args['type'], $user_id)) {
io_oauth_update_user_meta($args);
unset($_SESSION['temp_oauth']);
}else{
unset($_SESSION['temp_oauth']);
io_error('{"status":3,"msg":"'.sprintf(__('该用户已经绑定了 %s 账号','i_theme'),$args['type']).'","goto":"'.esc_url(home_url()).'/user/security"}');
}
}
}