功能页配置
私密文章(登录页)v1.3.0
什么是登录页?在导航栏 功能页 -> 登录页 点击查看效果。
您可以通过 teek-login-page
插槽自定义登录页。
使用登录页需要 2 个步骤:
- 创建一个登录页,如何创建请看 登录页
- 开启私密文章监听
ts
// .vitepress/config.mts
import { defineTeekConfig } from "vitepress-theme-teek/config";
const teekConfig = defineTeekConfig({
private: {
enabled: true,
},
});
此时已经开启了私密文章功能,下一步您需要配置登录相关的配置,如果要想了解所有配置请看 更多配置项。
这里仅仅给出一些配置项例子,有关私密文章更详细的设计、介绍、使用,请看 私密文章
ts
// .vitepress/config.mts
import { defineTeekConfig } from "vitepress-theme-teek/config";
const teekConfig = defineTeekConfig({
private: {
enabled: false,
expire: "1d",
session: true,
siteLogin: false,
site: [
{ username: "teek-site-1", password: "teek", role: "common", expire: "1d", session: true, strategy: "once" },
{ username: "teek-site-2", password: "teek", role: "admin", expire: "1d", session: false, strategy: "always" },
],
pages: [
{ username: "teek-pages-1", password: "teek", expire: "1d", session: true, strategy: "once" },
{ username: "teek-pages-2", password: "teek", expire: "1d", session: false, strategy: "always" },
],
realm: {
blog: [
{ username: "teek-blog-1", password: "teek", expire: "1d", session: true, strategy: "once" },
{ username: "teek-blog-2", password: "teek", expire: "1d", session: false, strategy: "always" },
],
comment: [
{ username: "teek-comment-1", password: "teek", expire: "1d", session: true, strategy: "always" },
{ username: "teek-comment-2", password: "teek", expire: "1d", session: false, strategy: "always" },
],
},
// onFocus: (value, formName) => {},
// onBlur: (value, formName) => {},
// doLogin: (loginInfo, type, nativeExecLogin) => true,
// doValidate: (type, frontmatter, nativeExecLogin) => true,
// encrypt: (value, frontmatter) => value,
// decrypt: (value, frontmatter) => value,
},
});
ts
interface Private {
/**
* 是否启用私密功能
*
* @default false
*/
enabled?: boolean;
/**
* 登录过期时间:1d 代表 1 天,1h 代表 1 小时,仅支持这两个单位,不加单位代表秒。过期后访问私密文章重新输入用户名和密码。默认一天
*
* @default '1d'
*/
expire?: string;
/**
* 开启是否在网页关闭或刷新后,清除登录状态,这样再次访问网页,需要重新登录
*
* @default false
*/
session?: boolean;
/**
* 是否使用站点级别登录功能,即第一次进入网站需要验证
*
* @default false
*/
siteLogin?: boolean;
/**
* 站点级别登录信息,进入站点时需要认证,当 siteLogin 为 true 时生效
*/
site?: (LoginInfo & { role?: "common" | "admin" })[];
/**
* 全局页面级登录信息,登录一次后其他全局页面级别的文章都可以访问
*/
pages?: LoginInfo[];
/**
* 领域页面级别登录信息,登录一次后其他相同领域的文章都可以访问
*/
realm?: { [key: string]: LoginInfo[] };
/**
* 输入框聚焦回调
*/
onFocus?: (value: string, formName: "username" | "password" | "verifyCode") => void;
/**
* 输入框失焦回调
*/
onBlur?: (value: string, formName: "username" | "password" | "verifyCode") => void;
/**
* 自定义登录逻辑,如果返回 boolean 代表自定义逻辑成功或者失败(内部会删除提示语),返回 undefined 代表结束登录逻辑
*
* @param nativeExecLogin 内置的登录函数,通过调用该函数来实现内置的登录功能
*/
doLogin?: (
loginInfo: { username: string; password: string },
type: "site" | "pages" | "realm" | "page",
nativeExecLogin: () => boolean
) => boolean | undefined;
/**
* 自定义验证逻辑
*
* @param nativeExecLogin 内置的登录函数,通过调用该函数来实现内置的登录功能
*/
doValidate?: (
type: "site" | "pages" | "realm" | "page",
frontmatter: Record<string, any>,
nativeValidate: () => boolean
) => boolean;
/**
* 自定义加密逻辑
*/
encrypt?: (value: string, frontmatter: Record<string, any>) => string;
/**
* 自定义解密逻辑
*/
decrypt?: (value: string, frontmatter: Record<string, any>) => string;
}
interface LoginInfo {
/**
* 用户名
*/
username: string;
/**
* 密码
*/
password: string;
/**
* 登录过期时间:1d 代表 1 天,1h 代表 1 小时,仅支持这两个单位,不加单位代表秒。过期后访问私密文章重新输入用户名和密码。默认一天
*
* @default 1d
*/
expire?: string;
/**
* 开启是否在网页关闭或刷新后,清除登录状态,这样再次访问网页,需要重新登录
*
* @default false
*/
session?: boolean;
/**
* 登录策略,once 代表一次登录,always 代表每次访问都登录
*
* @default 'once'
*/
strategy?: "once" | "always";
}
风险链接提示页 v1.3.0
什么是风险链接提示页?在导航栏 功能页 -> 风险链接提示页 点击查看效果。
您可以通过 teek-risk-link-page
插槽自定义险链接提示页。
使用风险链接提示页需要 2 个步骤:
- 创建一个风险链接提示页,如何创建请看 风险链接提示页
- 开启监听外部链接跳转拦截功能(监听
a
标签的点击事件)
ts
// .vitepress/config.mts
import { defineTeekConfig } from "vitepress-theme-teek/config";
const teekConfig = defineTeekConfig({
riskLink: {
enabled: true,
},
});
ts
interface RiskLink {
/**
* 是否启用风险链接提示功能
*
* @default false
*/
enabled?: boolean;
/**
* 白名单,支持正则表达式
*/
whitelist?: Array<RegExp | string>;
/**
* 黑名单,支持正则表达式
*
* @remark 如果设置了黑名单,则只拦截黑名单的链接
*/
blacklist?: Array<RegExp | string>;
}
此时 Teek 会监听所有 a
标签的点击事件,如果点击的链接是风险链接,则会先跳转到风险链接提示页。
什么是风险链接?
Teek 把非本域名下的跳转链接视为风险链接。
如果您需要对一些链接放行或者专门拦截,请使用白名单和黑名单功能。
ts
// .vitepress/config.mts
import { defineTeekConfig } from "vitepress-theme-teek/config";
const teekConfig = defineTeekConfig({
riskLink: {
enabled: true,
whitelist: ["http://vp.teek.top", /https:\/\/github.com/],
blacklist: [],
},
});
白名单和黑名单支持字符串和正则表达式:
- 当为字符串时,Teek 先完全匹配跳转的链接,如果匹配失败,则匹配跳转的链接开头部分(
startsWith
方法),因此你可以配置某个域名或者某个完整的链接 - 当为正则表达式时,按照正则表达式进行匹配跳转的链接
当配置了黑名单,则只拦截黑名单的链接,其他链接全部放行,如果黑名单的链接在白名单里,则也会放行(白名单优先级最高)。