邮箱后缀字段名调整

This commit is contained in:
wkj 2025-05-07 09:39:57 +08:00
parent 11962700ff
commit 719b225227
17 changed files with 77 additions and 77 deletions

View File

@ -589,11 +589,11 @@ export async function loginByAccount(params, context) {
// const config = applicationPassport.passport.config as EmailConfig;
// const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
// assert(emailConfig);
// const emailSuffix = config.emailSuffix;
// const emailSuffixes = config.emailSuffixes;
// // 检查邮箱后缀是否满足配置
// if (emailSuffix?.length! > 0) {
// if (emailSuffixes?.length! > 0) {
// let isValid = false;
// for (const suffix of emailSuffix!) {
// for (const suffix of emailSuffixes!) {
// if (account.endsWith(suffix)) {
// isValid = true;
// break;
@ -1002,11 +1002,11 @@ export async function loginByEmail(params, context) {
const config = applicationPassport.passport.config;
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
assert(emailConfig);
const emailSuffix = config.emailSuffix;
const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置
if (emailSuffix?.length > 0) {
if (emailSuffixes?.length > 0) {
let isValid = false;
for (const suffix of emailSuffix) {
for (const suffix of emailSuffixes) {
if (email.endsWith(suffix)) {
isValid = true;
break;
@ -1255,11 +1255,11 @@ export async function bindByEmail(params, context) {
const config = applicationPassport.passport.config;
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
assert(emailConfig);
const emailSuffix = config.emailSuffix;
const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置
if (emailSuffix?.length > 0) {
if (emailSuffixes?.length > 0) {
let isValid = false;
for (const suffix of emailSuffix) {
for (const suffix of emailSuffixes) {
if (email.endsWith(suffix)) {
isValid = true;
break;
@ -2193,11 +2193,11 @@ export async function sendCaptchaByEmail({ email, env, type: captchaType, }, con
const duration = config.codeDuration || 5;
const digit = config.digit || 4;
const mockSend = config.mockSend;
const emailSuffix = config.emailSuffix;
const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置
if (emailSuffix?.length > 0) {
if (emailSuffixes?.length > 0) {
let isValid = false;
for (const suffix of emailSuffix) {
for (const suffix of emailSuffixes) {
if (email.endsWith(suffix)) {
isValid = true;
break;

View File

@ -1,7 +1,7 @@
import { Style } from '../../../../types/Style';
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../../oak-app-domain").EntityDict, keyof import("../../../../oak-app-domain").EntityDict, false, {
style: Style;
entity: "platform" | "system" | "application";
entity: "system" | "platform" | "application";
entityId: string;
name: string;
}>) => React.ReactElement;

View File

@ -1,7 +1,7 @@
import { Config } from '../../../types/Config';
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../oak-app-domain").EntityDict, keyof import("../../../oak-app-domain").EntityDict, false, {
config: Config;
entity: "platform" | "system";
entity: "system" | "platform";
name: string;
entityId: string;
}>) => React.ReactElement;

View File

@ -15,19 +15,19 @@ declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends key
type?: ButtonProps['type'] | AmButtonProps['type'];
executeText?: string | undefined;
buttonProps?: (ButtonProps & {
color?: "default" | "primary" | "success" | "warning" | "danger" | undefined;
color?: "default" | "success" | "warning" | "primary" | "danger" | undefined;
fill?: "none" | "solid" | "outline" | undefined;
size?: "small" | "large" | "middle" | "mini" | undefined;
size?: "small" | "middle" | "large" | "mini" | undefined;
block?: boolean | undefined;
loading?: boolean | "auto" | undefined;
loadingText?: string | undefined;
loadingIcon?: import("react").ReactNode;
disabled?: boolean | undefined;
onClick?: ((event: import("react").MouseEvent<HTMLButtonElement, MouseEvent>) => unknown) | undefined;
type?: "reset" | "submit" | "button" | undefined;
type?: "button" | "reset" | "submit" | undefined;
shape?: "default" | "rounded" | "rectangular" | undefined;
children?: import("react").ReactNode;
} & Pick<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement>, "id" | "onMouseUp" | "onMouseDown" | "onTouchStart" | "onTouchEnd"> & {
} & Pick<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement>, "id" | "onMouseDown" | "onMouseUp" | "onTouchEnd" | "onTouchStart"> & {
className?: string | undefined;
style?: (import("react").CSSProperties & Partial<Record<"--text-color" | "--background-color" | "--border-radius" | "--border-width" | "--border-style" | "--border-color", string>>) | undefined;
tabIndex?: number | undefined;

View File

@ -6,8 +6,8 @@ import { Editor, Toolbar } from "@wangeditor/editor-for-react";
import { PlusOutlined, CloseOutlined } from '@ant-design/icons';
const { TextArea } = Input;
const { Text } = Typography;
function RenderEmailSuffix(props) {
const { emailSuffix, onChange, t } = props;
function RenderEmailSuffixes(props) {
const { emailSuffixes, onChange, t } = props;
const [inputVisible, setInputVisible] = useState(false);
const [inputValue, setInputValue] = useState('');
const inputRef = useRef(null);
@ -25,21 +25,21 @@ function RenderEmailSuffix(props) {
setInputValue(e.target.value);
};
const handleInputConfirm = () => {
if (inputValue && !emailSuffix?.includes(inputValue)) {
onChange([...emailSuffix || [], inputValue]);
if (inputValue && !emailSuffixes?.includes(inputValue)) {
onChange([...emailSuffixes || [], inputValue]);
}
setInputVisible(false);
setInputValue('');
};
const handleClose = (removedTag) => {
const emailSuffix2 = emailSuffix.filter((tag) => tag !== removedTag);
onChange(emailSuffix2);
const emailSuffixes2 = emailSuffixes.filter((tag) => tag !== removedTag);
onChange(emailSuffixes2);
};
const showInput = () => {
setInputVisible(true);
};
return (<Flex gap="4px 0" wrap="wrap">
{(emailSuffix || []).map((tag, index) => {
{(emailSuffixes || []).map((tag, index) => {
const isLongTag = tag.length > 20;
const tagElem = (<Tag closeIcon={<CloseOutlined />} key={tag} onClose={() => handleClose(tag)}>
<span>
@ -66,7 +66,7 @@ export default function Email(props) {
const [html, setHtml] = useState(config?.html || '');
const [emailCodeDuration, setEmailCodeDuration] = useState(config?.codeDuration || '');
const [emailDigit, setEmailDigit] = useState(config?.digit || '');
const [emailSuffix, setEmailSuffix] = useState(config?.emailSuffix || []);
const [emailSuffixes, setEmailSuffixes] = useState(config?.emailSuffixes || []);
// editor 实例
const [editor, setEditor] = useState(null); // TS 语法
// 工具栏配置
@ -91,7 +91,7 @@ export default function Email(props) {
setHtml(config?.html || '');
setEmailCodeDuration(config?.codeDuration || '');
setEmailDigit(config?.digit || '');
setEmailSuffix(config?.emailSuffix || []);
setEmailSuffixes(config?.emailSuffixes || []);
if (config?.html) {
setEContentType('html');
}
@ -205,9 +205,9 @@ export default function Email(props) {
}}/>
</Form.Item>
<Form.Item label="邮箱后缀" tooltip="允许的邮箱后缀(如: qq.com不填则不校验">
<RenderEmailSuffix t={t} emailSuffix={emailSuffix} onChange={(v) => {
if (v !== config?.emailSuffix) {
updateConfig(id, config, 'emailSuffix', v, 'email');
<RenderEmailSuffixes t={t} emailSuffixes={emailSuffixes} onChange={(v) => {
if (v !== config?.emailSuffixes) {
updateConfig(id, config, 'emailSuffixes', v, 'email');
}
}}/>
</Form.Item>

View File

@ -1,6 +1,6 @@
import { EntityDict } from '../../../oak-app-domain';
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<EntityDict, keyof EntityDict, false, {
type: "login" | "bind";
type: "bind" | "login";
url: string;
size: undefined;
}>) => React.ReactElement;

View File

@ -18,7 +18,7 @@ export type EmailConfig = {
html?: string;
codeDuration?: number;
digit?: number;
emailSuffix?: string[];
emailSuffixes?: string[];
};
export type PfwConfig = {
appId: string;

View File

@ -19,7 +19,7 @@ export type EmailConfig = {
html?: string;
codeDuration?: number;
digit?: number;
emailSuffix?: string[];
emailSuffixes?: string[];
};
export type PfwConfig = {
appId: string;

View File

@ -1,2 +1,2 @@
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
export default _default;

View File

@ -595,11 +595,11 @@ async function loginByAccount(params, context) {
// const config = applicationPassport.passport.config as EmailConfig;
// const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
// assert(emailConfig);
// const emailSuffix = config.emailSuffix;
// const emailSuffixes = config.emailSuffixes;
// // 检查邮箱后缀是否满足配置
// if (emailSuffix?.length! > 0) {
// if (emailSuffixes?.length! > 0) {
// let isValid = false;
// for (const suffix of emailSuffix!) {
// for (const suffix of emailSuffixes!) {
// if (account.endsWith(suffix)) {
// isValid = true;
// break;
@ -1009,11 +1009,11 @@ async function loginByEmail(params, context) {
const config = applicationPassport.passport.config;
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
(0, assert_1.assert)(emailConfig);
const emailSuffix = config.emailSuffix;
const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置
if (emailSuffix?.length > 0) {
if (emailSuffixes?.length > 0) {
let isValid = false;
for (const suffix of emailSuffix) {
for (const suffix of emailSuffixes) {
if (email.endsWith(suffix)) {
isValid = true;
break;
@ -1264,11 +1264,11 @@ async function bindByEmail(params, context) {
const config = applicationPassport.passport.config;
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
(0, assert_1.assert)(emailConfig);
const emailSuffix = config.emailSuffix;
const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置
if (emailSuffix?.length > 0) {
if (emailSuffixes?.length > 0) {
let isValid = false;
for (const suffix of emailSuffix) {
for (const suffix of emailSuffixes) {
if (email.endsWith(suffix)) {
isValid = true;
break;
@ -2210,11 +2210,11 @@ async function sendCaptchaByEmail({ email, env, type: captchaType, }, context) {
const duration = config.codeDuration || 5;
const digit = config.digit || 4;
const mockSend = config.mockSend;
const emailSuffix = config.emailSuffix;
const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置
if (emailSuffix?.length > 0) {
if (emailSuffixes?.length > 0) {
let isValid = false;
for (const suffix of emailSuffix) {
for (const suffix of emailSuffixes) {
if (email.endsWith(suffix)) {
isValid = true;
break;

View File

@ -18,7 +18,7 @@ export type EmailConfig = {
html?: string;
codeDuration?: number;
digit?: number;
emailSuffix?: string[];
emailSuffixes?: string[];
};
export type PfwConfig = {
appId: string;

View File

@ -19,7 +19,7 @@ export type EmailConfig = {
html?: string;
codeDuration?: number;
digit?: number;
emailSuffix?: string[];
emailSuffixes?: string[];
};
export type PfwConfig = {
appId: string;

View File

@ -1,2 +1,2 @@
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "system", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "passport", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
export default _default;

View File

@ -14,7 +14,7 @@ export declare function createToDo<ED extends EntityDict & BaseEntityDict, T ext
redirectTo: EntityDict['toDo']['OpSchema']['redirectTo'];
entity: any;
entityId: string;
}, userIds?: string[]): Promise<0 | 1>;
}, userIds?: string[]): Promise<1 | 0>;
/**
* todo例程entity对象上进行action操作时filtertodo完成
* entity的action的后trigger中调用

View File

@ -791,12 +791,12 @@ export async function loginByAccount<ED extends EntityDict>(
// const config = applicationPassport.passport.config as EmailConfig;
// const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
// assert(emailConfig);
// const emailSuffix = config.emailSuffix;
// const emailSuffixes = config.emailSuffixes;
// // 检查邮箱后缀是否满足配置
// if (emailSuffix?.length! > 0) {
// if (emailSuffixes?.length! > 0) {
// let isValid = false;
// for (const suffix of emailSuffix!) {
// for (const suffix of emailSuffixes!) {
// if (account.endsWith(suffix)) {
// isValid = true;
// break;
@ -1269,12 +1269,12 @@ export async function loginByEmail<ED extends EntityDict>(
const config = applicationPassport.passport.config as EmailConfig;
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
assert(emailConfig);
const emailSuffix = config.emailSuffix;
const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置
if (emailSuffix?.length! > 0) {
if (emailSuffixes?.length! > 0) {
let isValid = false;
for (const suffix of emailSuffix!) {
for (const suffix of emailSuffixes!) {
if (email.endsWith(suffix)) {
isValid = true;
break;
@ -1592,12 +1592,12 @@ export async function bindByEmail<ED extends EntityDict>(
const config = applicationPassport.passport.config as EmailConfig;
const emailConfig = system?.config.Emails?.find((ele) => ele.account === config.account);
assert(emailConfig);
const emailSuffix = config.emailSuffix;
const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置
if (emailSuffix?.length! > 0) {
if (emailSuffixes?.length! > 0) {
let isValid = false;
for (const suffix of emailSuffix!) {
for (const suffix of emailSuffixes!) {
if (email.endsWith(suffix)) {
isValid = true;
break;
@ -2900,12 +2900,12 @@ export async function sendCaptchaByEmail<ED extends EntityDict>(
const duration = config.codeDuration || 5;
const digit = config.digit || 4;
const mockSend = config.mockSend;
const emailSuffix = config.emailSuffix;
const emailSuffixes = config.emailSuffixes;
// 检查邮箱后缀是否满足配置
if (emailSuffix?.length! > 0) {
if (emailSuffixes?.length! > 0) {
let isValid = false;
for (const suffix of emailSuffix!) {
for (const suffix of emailSuffixes!) {
if (email.endsWith(suffix)) {
isValid = true;
break;

View File

@ -11,12 +11,12 @@ import { PlusOutlined, CloseOutlined } from '@ant-design/icons';
const { TextArea } = Input;
const { Text } = Typography;
function RenderEmailSuffix(props: {
emailSuffix?: string[];
function RenderEmailSuffixes(props: {
emailSuffixes?: string[];
onChange: (v: string[]) => void;
t: (k: string) => string;
}) {
const { emailSuffix, onChange, t } = props;
const { emailSuffixes, onChange, t } = props;
const [inputVisible, setInputVisible] = useState(false);
const [inputValue, setInputValue] = useState('');
const inputRef = useRef<InputRef>(null);
@ -38,16 +38,16 @@ function RenderEmailSuffix(props: {
};
const handleInputConfirm = () => {
if (inputValue && !emailSuffix?.includes(inputValue)) {
onChange([...emailSuffix || [], inputValue]);
if (inputValue && !emailSuffixes?.includes(inputValue)) {
onChange([...emailSuffixes || [], inputValue]);
}
setInputVisible(false);
setInputValue('');
};
const handleClose = (removedTag: string) => {
const emailSuffix2 = emailSuffix!.filter((tag) => tag !== removedTag);
onChange(emailSuffix2);
const emailSuffixes2 = emailSuffixes!.filter((tag) => tag !== removedTag);
onChange(emailSuffixes2);
};
const showInput = () => {
setInputVisible(true);
@ -55,7 +55,7 @@ function RenderEmailSuffix(props: {
return (
<Flex gap="4px 0" wrap="wrap">
{(emailSuffix || []).map<React.ReactNode>((tag, index) => {
{(emailSuffixes || []).map<React.ReactNode>((tag, index) => {
const isLongTag = tag.length > 20;
const tagElem = (
<Tag
@ -112,7 +112,7 @@ export default function Email(props: {
const [html, setHtml] = useState(config?.html || '');
const [emailCodeDuration, setEmailCodeDuration] = useState(config?.codeDuration || '');
const [emailDigit, setEmailDigit] = useState(config?.digit || '');
const [emailSuffix, setEmailSuffix] = useState(config?.emailSuffix || []);
const [emailSuffixes, setEmailSuffixes] = useState(config?.emailSuffixes || []);
// editor 实例
const [editor, setEditor] = useState<IDomEditor | null>(null) // TS 语法
@ -141,7 +141,7 @@ export default function Email(props: {
setHtml(config?.html || '');
setEmailCodeDuration(config?.codeDuration || '');
setEmailDigit(config?.digit || '');
setEmailSuffix(config?.emailSuffix || []);
setEmailSuffixes(config?.emailSuffixes || []);
if (config?.html) {
setEContentType('html');
} else {
@ -347,12 +347,12 @@ export default function Email(props: {
label="邮箱后缀"
tooltip="允许的邮箱后缀(如: qq.com不填则不校验"
>
<RenderEmailSuffix
<RenderEmailSuffixes
t={t}
emailSuffix={emailSuffix}
emailSuffixes={emailSuffixes}
onChange={(v) => {
if (v !== (config as EmailConfig)?.emailSuffix) {
updateConfig(id, config!, 'emailSuffix', v, 'email');
if (v !== (config as EmailConfig)?.emailSuffixes) {
updateConfig(id, config!, 'emailSuffixes', v, 'email');
}
}}
/>

View File

@ -20,7 +20,7 @@ export type EmailConfig = {
html?: string;
codeDuration?: number; //验证码有效时间 单位分钟, 不填5分钟
digit?: number; //验证码位数 4~8默认为4位
emailSuffix?: string[] //邮箱后缀,不填则不校验
emailSuffixes?: string[] //邮箱后缀,不填则不校验
};
export type PfwConfig = {