登录注册体系的源码级硬切换

This commit is contained in:
kate522 committed 2026-08-23 20:30:01 +08:00
1 parent 73fcd4ed72
commit af52f9e94d
72 files changed
+1666 -6576

No files matched your search

+1 -9
View File
@@ -663,15 +663,7 @@ function findForm(){
form=box.closest('form');
if(!form&&C.scene==='comment') form=document.getElementById('commentform');
if(!form&&(C.scene==='login'||C.scene==='register')){
form=document.getElementById('aksrt-login-form')
||document.getElementById('aksrt-modal-login-form')
||document.getElementById('sign-login-form')
||document.getElementById('aksrt-phone-login-form')
||document.getElementById('aksrt-modal-register-form')
||document.getElementById('sign-register-form')
||document.getElementById('aksrt-phone-register-form')
||document.querySelector('.auth-form')
||document.querySelector('.sign-form');
form=box.closest('[data-auth-form]')||document.querySelector('[data-auth-form]');
}
if(!form&&C.scene==='bind_phone'){
form=document.getElementById('aksrt-bind-phone-form')
+1 -19
View File
@@ -13,9 +13,7 @@ if (!function_exists('aksrt_get_user_notifications')) :
/**
* 获取用户提醒列表(即时提醒,不持久化)
*
* 当前通知源:
* - 邮箱待验证
* - 评论待审核
* 当前通知源:评论待审核。
*
* @param int $user_id 用户 ID,默认当前用户
* @return array<int, array{type:string,title:string,desc:string,url:string,count:int}>
@@ -28,21 +26,6 @@ function aksrt_get_user_notifications(int $user_id = 0): array {
$items = [];
$email_verified = true;
if (class_exists('\AKSRT\Auth\Service')) {
$email_verified = \AKSRT\Auth\Service::user_is_email_verified($user_id);
}
if (!$email_verified && (!class_exists('\AKSRT\Settings\Settings') || \AKSRT\Settings\Settings::notification_enabled('verify_email'))) {
$items[] = [
'type' => 'verify_email',
'title' => __('邮箱待验证', 'aksrt'),
'desc' => __('请尽快完成邮箱验证,部分功能需要验证后才能使用。', 'aksrt'),
'url' => function_exists('aksrt_get_verify_email_url') ? aksrt_get_verify_email_url($user_id) : home_url('/'),
'count' => 1,
];
}
$pending_comments = (int) get_comments([
'user_id' => $user_id,
'count' => true,
@@ -72,7 +55,6 @@ function aksrt_notification_type_label(string $type): string {
'download_ready' => __('下载就绪', 'aksrt'),
'credits_added' => __('积分增加', 'aksrt'),
'credits_deducted' => __('积分扣减', 'aksrt'),
'verify_email' => __('邮箱验证', 'aksrt'),
'pending_comments' => __('待审核评论', 'aksrt'),
'notice' => __('通知', 'aksrt'),
];
+4 -16
View File
@@ -302,25 +302,13 @@ add_action('wp_ajax_aksrt_change_email', function () {
}
}
// ====== 邮箱变更后重置验证状态(阶段 5)======
// 1. 写入 14 天回滚窗口 meta(管理员可在此期内还原旧邮箱)
// 2. 把 aksrt_email_verified 重置为 0
// 3. 若功能启用 → 立即给新邮箱发送验证邮件
// Keep the account-change audit window; registration verification is pre-create only.
update_user_meta( $user_id, 'aksrt_email_previous', $old_email );
update_user_meta( $user_id, 'aksrt_email_changed_at', time() );
$verify_url = '';
$verify_message = '';
if ( class_exists( '\AKSRT\Settings\Settings' ) && class_exists( '\AKSRT\Auth\Service' )
&& \AKSRT\Settings\Settings::registration_requires_email_verification() ) {
update_user_meta( $user_id, 'aksrt_email_verified', 0 );
// 用户对自身的 edit_user 权限映射到 'read',因此 admin_send_verification 会通过权限校验。
$verify_result = \AKSRT\Auth\Service::admin_send_verification( $user_id, $user_id );
if ( ! empty( $verify_result['success'] ) ) {
$verify_url = function_exists('aksrt_get_verify_email_url') ? aksrt_get_verify_email_url( $user_id ) : '';
$verify_message = __( '请前往新邮箱完成验证,否则下次登录将被拦截。', 'aksrt' );
}
}
$verify_url = '';
$verify_message = '';
update_user_meta( $user_id, 'aksrt_email_verified', 1 );
if ( class_exists( 'WP_Session_Tokens' ) ) {
WP_Session_Tokens::get_instance( $user_id )->destroy_all();
+13 -171
View File
@@ -11,58 +11,7 @@ defined('ABSPATH') || exit;
// 一、模板注册表 — 所有特殊页面的"身份证"
// 修改此处即可增删模板页面,无需改动其他逻辑
// ============================================================
$_aksrt_special_templates = [
'login' => [
'file' => 'templates/pages/page-login.php',
'slug' => 'login',
'title' => '登录',
'fallback' => '/login/',
],
'register' => [
'file' => 'templates/pages/page-register.php',
'slug' => 'register',
'title' => '注册',
'fallback' => '/register/',
],
'bind' => [
'file' => 'templates/pages/page-bind-account.php',
'slug' => 'bind-account',
'title' => '绑定账号',
'fallback' => '/bind-account/',
],
'reset-password' => [
'file' => 'templates/pages/page-reset-password.php',
'slug' => 'reset-password',
'title' => '重置密码',
'fallback' => '/reset-password/',
],
'verify-email' => [
'file' => 'templates/pages/page-verify-email.php',
'slug' => 'verify-email',
'title' => '邮箱验证',
'fallback' => '/verify-email/',
],
'categories' => [
'file' => 'templates/pages/page-categories.php',
'slug' => 'categories',
'title' => '分类目录',
'fallback' => '/categories/',
],
'friends' => [
'file' => 'templates/pages/page-friends.php',
'slug' => 'friends',
'title' => '友情链接',
'fallback' => '/friends/',
],
'profile' => [
'file' => 'templates/pages/page-profile.php',
'slug' => 'profile',
'title' => '个人中心',
'fallback' => '/',
],
];
// legacy-style v2 routing keeps only true fixed template pages in the registry.
// Only true fixed template pages live in the registry.
$_aksrt_special_templates = [
'sign' => [
'file' => 'templates/pages/page-sign.php',
@@ -70,24 +19,6 @@ $_aksrt_special_templates = [
'title' => '登录/注册',
'fallback' => '/sign/',
],
'bind' => [
'file' => 'templates/pages/page-bind-account.php',
'slug' => 'bind-account',
'title' => '绑定账号',
'fallback' => '/bind-account/',
],
'reset-password' => [
'file' => 'templates/pages/page-reset-password.php',
'slug' => 'reset-password',
'title' => '重置密码',
'fallback' => '/reset-password/',
],
'verify-email' => [
'file' => 'templates/pages/page-verify-email.php',
'slug' => 'verify-email',
'title' => '邮箱验证',
'fallback' => '/verify-email/',
],
'categories' => [
'file' => 'templates/pages/page-categories.php',
'slug' => 'categories',
@@ -203,21 +134,9 @@ function aksrt_resolve_page_template_file(string $template_file = '', string $po
$template_file = ltrim($template_file, '/\\');
$post_slug = sanitize_title($post_slug);
$legacy_auth_templates = [
'templates/pages/page-login.php' => 'login',
'templates/pages/page-register.php' => 'register',
'templates/pages/page-bind-account.php' => 'bind',
'templates/pages/page-reset-password.php' => 'reset-password',
'templates/pages/page-verify-email.php' => 'verify-email',
];
if ($template_file !== '') {
if ($template_file === 'templates/pages/page-sign.php') {
return aksrt_get_auth_template_file(aksrt_get_auth_tab(), true);
}
if (!empty($legacy_auth_templates[$template_file])) {
return aksrt_get_auth_template_file((string) $legacy_auth_templates[$template_file], true);
return $template_file;
}
if (strpos($template_file, 'templates/pages/') === 0 && aksrt_locate_template_file($template_file)) {
@@ -226,17 +145,8 @@ function aksrt_resolve_page_template_file(string $template_file = '', string $po
}
if ($post_slug !== '') {
$auth_slug_map = [
'sign' => aksrt_get_auth_tab(),
'login' => 'login',
'register' => 'register',
'bind-account' => 'bind',
'reset-password' => 'reset-password',
'verify-email' => 'verify-email',
];
if (!empty($auth_slug_map[$post_slug])) {
return aksrt_get_auth_template_file((string) $auth_slug_map[$post_slug], true);
if ($post_slug === 'sign') {
return 'templates/pages/page-sign.php';
}
$slug_map = [
@@ -261,87 +171,20 @@ function aksrt_normalize_auth_tab(string $tab): string {
switch ($tab) {
case 'signin':
case 'login':
return 'login';
return 'signin';
case 'signup':
case 'register':
return 'register';
return 'signup';
case 'bind':
case 'bind-account':
return 'bind';
case 'reset':
case 'lostpassword':
case 'reset-password':
return 'reset-password';
case 'verify':
case 'verify-email':
return 'verify-email';
case 'resetpassword':
return 'resetpassword';
case 'oauth':
return 'oauth';
default:
return 'login';
return 'signin';
}
}
/**
* Whether an auth tab should be rendered by the unified sign page.
*/
function aksrt_auth_tab_uses_unified_sign_page(string $tab): bool {
return in_array(
aksrt_normalize_auth_tab($tab),
['login', 'register'],
true
);
}
/**
* Resolve the auth template file, preferring the unified sign page when present.
*/
function aksrt_get_auth_template_file(string $tab = 'login', bool $prefer_sign_page = true): string {
$normalized_tab = aksrt_normalize_auth_tab($tab);
$sign_template = 'templates/pages/page-sign.php';
if (
$prefer_sign_page
&& aksrt_auth_tab_uses_unified_sign_page($normalized_tab)
&& aksrt_locate_template_file($sign_template)
) {
return $sign_template;
}
switch ($normalized_tab) {
case 'register':
return 'templates/pages/page-register.php';
case 'bind':
return 'templates/pages/page-bind-account.php';
case 'reset-password':
return 'templates/pages/page-reset-password.php';
case 'verify-email':
return 'templates/pages/page-verify-email.php';
default:
return 'templates/pages/page-login.php';
}
}
/**
* Return the active auth view for sign routes and the sign page template.
*/
function aksrt_get_auth_tab(): string {
$query_tab = get_query_var('aksrt_auth_tab');
if (is_string($query_tab) && $query_tab !== '') {
return aksrt_normalize_auth_tab($query_tab);
}
if (!empty($_GET['tab'])) {
return aksrt_normalize_auth_tab((string) wp_unslash($_GET['tab']));
}
$post = get_queried_object();
if ($post instanceof WP_Post) {
return aksrt_normalize_auth_tab((string) $post->post_name);
}
return 'login';
}
/**
* 清除模板页面缓存
*/
@@ -389,9 +232,8 @@ function aksrt_get_current_special_template_path(): string {
return $profile_template ?: '';
}
if (get_query_var('aksrt_sign')) {
$auth_template = aksrt_get_auth_template_file((string) get_query_var('aksrt_auth_tab'), true);
$auth_template_path = aksrt_locate_template_file($auth_template);
if (get_query_var('aksrt_sign')) {
$auth_template_path = aksrt_locate_template_file('templates/pages/page-sign.php');
return $auth_template_path ?: '';
}
+12 -74
View File
@@ -149,36 +149,14 @@ endif;
if (!function_exists('aksrt_get_sign_page_url')) :
/**
* Get the unified auth page URL, with legacy route fallback while the page self-heals.
* Get the only public authentication page URL.
*
* @param string $tab
* @param array<string, scalar> $args
*/
function aksrt_get_sign_page_url(string $tab = 'login', array $args = []): string {
function aksrt_get_sign_page_url(string $tab = 'signin', array $args = []): string {
$tab = aksrt_normalize_auth_tab($tab);
$legacy_fallbacks = [
'login' => home_url('/login/'),
'register' => home_url('/register/'),
'bind' => home_url('/bind-account/'),
'reset-password' => home_url('/reset-password/'),
'verify-email' => home_url('/verify-email/'),
];
$page = aksrt_find_template_page('templates/pages/page-sign.php');
if (!$page) {
aksrt_ensure_template_page('sign');
$page = aksrt_find_template_page('templates/pages/page-sign.php');
}
if ($page instanceof WP_Post) {
$url = get_permalink($page->ID);
$args = ['tab' => $tab] + $args;
return add_query_arg($args, $url);
}
$url = $legacy_fallbacks[$tab] ?? home_url('/login/');
return !empty($args) ? add_query_arg($args, $url) : $url;
return add_query_arg(['tab' => $tab] + $args, home_url('/sign/'));
}
@@ -187,19 +165,14 @@ function aksrt_get_sign_page_url(string $tab = 'login', array $args = []): strin
*/
function aksrt_is_auth_page_request(): bool {
return (bool) get_query_var('aksrt_sign')
|| is_page_template('templates/pages/page-sign.php')
|| is_page_template('templates/pages/page-login.php')
|| is_page_template('templates/pages/page-register.php')
|| is_page_template('templates/pages/page-bind-account.php')
|| is_page_template('templates/pages/page-reset-password.php')
|| is_page_template('templates/pages/page-verify-email.php');
|| is_page_template('templates/pages/page-sign.php');
}
endif;
if (!function_exists('aksrt_get_login_url')) :
/** 获取登录页 URL */
function aksrt_get_login_url($redirect = '') {
$url = aksrt_get_sign_page_url('login');
$url = aksrt_get_sign_page_url('signin');
if ($redirect) {
$url = add_query_arg('redirect_to', urlencode($redirect), $url);
}
@@ -210,14 +183,14 @@ endif;
if (!function_exists('aksrt_get_register_url')) :
/** 获取注册页 URL */
function aksrt_get_register_url() {
return aksrt_get_sign_page_url('register');
return aksrt_get_sign_page_url('signup');
}
endif;
if (!function_exists('aksrt_get_bind_url')) :
/** 获取绑定账号页面 URL */
function aksrt_get_bind_url($transient_key = '') {
$url = aksrt_get_template_url('bind');
$url = aksrt_get_sign_page_url('bind');
if ($transient_key) {
$url = add_query_arg('obk', $transient_key, $url);
}
@@ -226,24 +199,12 @@ function aksrt_get_bind_url($transient_key = '') {
endif;
if (!function_exists('aksrt_get_logout_url')) :
/**
* 获取退出登录 URL。
*
* Prefer query-arg form so logout works even when /logout/ rewrite is missing
* (Apache would 404 the pretty path before WordPress runs). Pretty /logout/
* remains registered as a convenience alias.
*
* @param string $redirect Redirect after logout.
*/
/** 获取唯一退出登录 URL。 */
function aksrt_get_logout_url($redirect = '') {
$target = is_string($redirect) && $redirect !== '' ? $redirect : home_url('/');
// home_url('/?aksrt_logout=1') always hits index.php without rewrite rules.
$url = add_query_arg(
[
'aksrt_logout' => '1',
'redirect_to' => $target,
],
home_url('/')
['redirect_to' => $target],
home_url('/logout/')
);
return wp_nonce_url($url, 'aksrt-logout');
}
@@ -253,33 +214,10 @@ if (!function_exists('aksrt_get_reset_password_url')) :
/**
* 获取重置密码页面 URL
*
* @param string $token 主题重置 token(可选,设置密码时需要)
* @param int $user_id 用户 ID(可选,设置密码时需要)
* @return string
*/
function aksrt_get_reset_password_url(string $token = '', int $user_id = 0): string {
$url = aksrt_get_template_url('reset-password');
if ($token !== '' && $user_id > 0) {
$url = add_query_arg([
'token' => $token,
'uid' => $user_id,
], $url);
}
return $url;
}
endif;
if (!function_exists('aksrt_get_verify_email_url')) :
/** 获取邮箱验证页面 URL */
function aksrt_get_verify_email_url(int $user_id = 0, array $args = []): string {
$url = aksrt_get_template_url('verify-email');
if ($user_id > 0) {
$args['uid'] = $user_id;
}
if (!empty($args)) {
$url = add_query_arg($args, $url);
}
return $url;
function aksrt_get_reset_password_url(): string {
return aksrt_get_sign_page_url('resetpassword');
}
endif;