34 lines
776 B
TypeScript
34 lines
776 B
TypeScript
import { useEffect, useState } from 'react';
|
||
import FingerprintJS from '@fingerprintjs/fingerprintjs';
|
||
|
||
/**
|
||
* Hook: 获取设备指纹(visitorId)
|
||
*/
|
||
export function useDeviceFingerprint() {
|
||
const [fingerprint, setFingerprint] = useState<string | null>(null);
|
||
|
||
useEffect(() => {
|
||
let isMounted = true;
|
||
|
||
async function loadFingerprint() {
|
||
try {
|
||
const fp = await FingerprintJS.load();
|
||
const result = await fp.get();
|
||
if (isMounted) {
|
||
setFingerprint(result.visitorId);
|
||
}
|
||
} catch (err) {
|
||
console.error('获取设备指纹失败:', err);
|
||
}
|
||
}
|
||
|
||
loadFingerprint();
|
||
|
||
return () => {
|
||
isMounted = false;
|
||
};
|
||
}, []);
|
||
|
||
return fingerprint; // 初始为 null,加载后返回指纹 ID
|
||
}
|