Browse Source

feat: 添加全局配置以控制注册功能,更新相关组件以适应新逻辑

acas
npmrun 1 month ago
parent
commit
f4c2539c68
  1. 5
      app/components/TopNav.vue
  2. 11
      app/middleware/auth.global.ts
  3. 3
      app/pages/auth/login.vue
  4. 8
      app/pages/auth/register.vue
  5. BIN
      packages/drizzle-pkg/db.sqlite

5
app/components/TopNav.vue

@ -6,6 +6,7 @@ const navHidden = ref(false)
const route = useRoute()
const { loggedIn, user, clear, initialized } = useAuthSession()
const { config: globalConfig } = useGlobalConfig()
const links: any = [
{ to: "/", label: "首页" },
@ -66,7 +67,7 @@ watch(() => route.path, () => {
</li>
<li v-if="!loggedIn && initialized" class="mobile-auth">
<NuxtLink to="/auth/login" class="auth-link">登录</NuxtLink>
<NuxtLink to="/auth/register" class="auth-btn">注册</NuxtLink>
<NuxtLink v-if="globalConfig.allowRegister" to="/auth/register" class="auth-btn">注册</NuxtLink>
</li>
<li v-else-if="loggedIn && initialized" class="mobile-auth">
<NuxtLink class="auth-link">{{ user?.username }}</NuxtLink>
@ -75,7 +76,7 @@ watch(() => route.path, () => {
<div v-if="!loggedIn && initialized" class="nav-auth">
<NuxtLink to="/auth/login" class="auth-link">登录</NuxtLink>
<NuxtLink to="/auth/register" class="auth-btn">注册</NuxtLink>
<NuxtLink v-if="globalConfig.allowRegister" to="/auth/register" class="auth-btn">注册</NuxtLink>
</div>
<div v-else-if="loggedIn && initialized" class="nav-auth">
<NuxtLink to="/admin/dashboard" class="auth-btn">管理</NuxtLink>

11
app/middleware/auth.global.ts

@ -5,7 +5,7 @@ import {
normalizeSafeRedirect,
} from "@/utils/auth-routes";
import { useAuthSession } from "../composables/useAuthSession";
import { FRONTEND_LOGIN_PATH } from "common/config"
import { FRONTEND_LOGIN_PATH, FRONTEND_REGISTER_PATH } from "common/config"
export default defineNuxtRouteMiddleware(async (to) => {
if(to.path.startsWith("/__nuxt_error")) {
@ -45,6 +45,15 @@ export default defineNuxtRouteMiddleware(async (to) => {
});
}
if (!isLoggedIn && currentPath === FRONTEND_REGISTER_PATH) {
const { config: globalConfig } = useGlobalConfig();
if (globalConfig.value.allowRegister === false) {
const { $toast } = useNuxtApp();
$toast?.warning("当前已关闭注册");
return navigateTo(FRONTEND_LOGIN_PATH);
}
}
if (isLoggedIn && isGuestOnlyRoute(currentPath)) {
const redirectCandidate = Array.isArray(to.query.redirect)
? to.query.redirect[0]

3
app/pages/auth/login.vue

@ -5,6 +5,7 @@ definePageMeta({
const route = useRoute()
const { $toast } = useNuxtApp()
const { config: globalConfig } = useGlobalConfig()
const redirect = computed(() => route.query.redirect as string || '/')
const loginForm = reactive({
@ -172,7 +173,7 @@ onMounted(() => {
</button> -->
</div>
<p class="form-footer">
<p v-if="globalConfig.allowRegister" class="form-footer">
还没有账户<NuxtLink to="/auth/register">立即注册</NuxtLink>
</p>
</div>

8
app/pages/auth/register.vue

@ -4,6 +4,14 @@ definePageMeta({
})
const { $toast } = useNuxtApp()
const { config: globalConfig } = useGlobalConfig()
watch(() => globalConfig.allowRegister, (val) => {
if (val === false) {
$toast.error('当前已关闭注册')
navigateTo('/auth/login')
}
}, { immediate: true })
const registerForm = reactive({
username: '',

BIN
packages/drizzle-pkg/db.sqlite

Binary file not shown.
Loading…
Cancel
Save