- OAuth 流程透传 redirect 参数,登录后回到触发页面而非固定跳 Dashboard - 服务端校验 redirect 为相对路径,防止 Open Redirect 攻击 - 隐藏 Apple 登录按钮和邮箱注册入口 - Dark Mode 切换改为下拉菜单样式 - 提取 useClickOutside hook 消除重复代码 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
13 lines
484 B
TypeScript
13 lines
484 B
TypeScript
import { useEffect, type RefObject } from 'react';
|
|
|
|
export function useClickOutside(ref: RefObject<HTMLElement | null>, onClose: () => void, active: boolean) {
|
|
useEffect(() => {
|
|
if (!active) return;
|
|
const handler = (e: MouseEvent) => {
|
|
if (ref.current && !ref.current.contains(e.target as Node)) onClose();
|
|
};
|
|
document.addEventListener('mousedown', handler);
|
|
return () => document.removeEventListener('mousedown', handler);
|
|
}, [active, ref, onClose]);
|
|
}
|