{"id":27697,"date":"2025-07-28T21:19:10","date_gmt":"2025-07-28T14:19:10","guid":{"rendered":"https:\/\/dps.media\/?page_id=27697"},"modified":"2025-07-28T21:33:46","modified_gmt":"2025-07-28T14:33:46","slug":"%e8%ae%be%e7%bd%ae-facebook-%e5%8f%8c%e9%87%8d%e8%ae%a4%e8%af%81","status":"publish","type":"page","link":"https:\/\/dps.media\/zh\/%e8%ae%be%e7%bd%ae-facebook-%e5%8f%8c%e9%87%8d%e8%ae%a4%e8%af%81\/","title":{"rendered":"\u83b7\u53d6Facebook\u53cc\u91cd\u8ba4\u8bc1(2FA)"},"content":{"rendered":"<?xml encoding=\"utf-8\" ?><style>\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;500;600&display=swap');\n\np.otp-subtitle {\n    text-align: center;\n}\n.otp-result-label {\n    text-align: center;\n}\ndiv#otpResultValue {\n    text-align: center;\n}\n\/* Reset m\u1ed9t v\u00e0i thu\u1ed9c t\u00ednh c\u00f3 th\u1ec3 b\u1ecb theme WordPress ghi \u0111\u00e8 *\/\n.otp-finder-wrapper *, .otp-finder-wrapper *::before, .otp-finder-wrapper *::after {\n  box-sizing: border-box;\n  margin: 0;\n  padding: 0;\n}\n\n.otp-finder-wrapper {\n  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;\n  color: #000;\n  line-height: 1.6;\n  font-feature-settings: 'cv11', 'ss01';\n  -webkit-font-smoothing: antialiased;\n  background: #fafafa;\n  padding: 2rem 1rem;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n}\n\n:root {\n  --otp-primary: #000;\n  --otp-primary-light: #333;\n  --otp-accent: #0066ff;\n  --otp-success: #00c851;\n  --otp-error: #ff3547;\n  --otp-warning: #ff9500;\n  --otp-bg: #fafafa;\n  --otp-surface: #fff;\n  --otp-text: #000;\n  --otp-text-light: #666;\n  --otp-text-lighter: #999;\n  --otp-border: #e1e1e1;\n  --otp-shadow: 0 2px 20px rgba(0,0,0,0.08);\n  --otp-shadow-hover: 0 8px 40px rgba(0,0,0,0.12);\n  --otp-radius: 12px;\n  --otp-transition: cubic-bezier(0.23, 1, 0.32, 1);\n}\n\n.otp-container {\n  width: 100%;\n  max-width: 420px;\n  margin: 2rem auto;\n  background: var(--otp-surface);\n  border-radius: var(--otp-radius);\n  border: 1px solid var(--otp-border);\n  box-shadow: var(--otp-shadow);\n  overflow: hidden;\n  position: relative;\n  transition: all 0.4s var(--otp-transition);\n}\n\n.otp-container:hover {\n  transform: translateY(-2px);\n  box-shadow: var(--otp-shadow-hover);\n  border-color: #d0d0d0;\n}\n\n.otp-header {\n  padding: 2.5rem 2rem 1.5rem;\n  text-align: center;\n  position: relative;\n}\n\n.otp-logo {\n  width: 48px;\n  height: 48px;\n  background: var(--otp-primary);\n  border-radius: 12px;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  margin: 0 auto 1.5rem;\n  position: relative;\n  overflow: hidden;\n  transition: all 0.6s var(--otp-transition);\n}\n\n.otp-logo::before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: -100%;\n  width: 100%;\n  height: 100%;\n  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);\n  transition: left 0.6s var(--otp-transition);\n}\n\n.otp-logo:hover::before {\n  left: 100%;\n}\n\n.otp-logo:hover {\n  transform: scale(1.05) rotate(5deg);\n  box-shadow: 0 8px 25px rgba(0,0,0,0.15);\n}\n\n.otp-logo::after {\n  content: 'OTP';\n  color: white;\n  font-weight: 600;\n  font-size: 14px;\n  letter-spacing: 0.5px;\n}\n\n.otp-container h1 {\n  font-size: 1.75rem;\n  font-weight: 600;\n  color: var(--otp-text);\n  margin-bottom: 0.5rem;\n  letter-spacing: -0.025em;\n  padding: 0;\n  border: none;\n}\n\n.otp-subtitle {\n  color: var(--otp-text-light);\n  font-size: 0.95rem;\n  font-weight: 400;\n}\n\n.otp-form {\n  padding: 0 2rem 2.5rem;\n}\n\n.otp-input-group {\n  margin-bottom: 1.5rem;\n  position: relative;\n}\n\n.otp-input {\n  width: 100%;\n  height: 56px;\n  padding: 0 1.25rem;\n  border: 2px solid var(--otp-border);\n  border-radius: var(--otp-radius);\n  background: var(--otp-surface);\n  color: var(--otp-text);\n  font-size: 1rem;\n  font-family: inherit;\n  transition: all 0.3s var(--otp-transition);\n  outline: none;\n  letter-spacing: 1px;\n}\n\n.otp-input::placeholder {\n  color: var(--otp-text-lighter);\n  font-weight: 400;\n  letter-spacing: normal;\n}\n\n.otp-input:focus {\n  border-color: var(--otp-accent);\n  transform: translateY(-1px);\n  box-shadow: 0 4px 20px rgba(0,102,255,0.15);\n}\n\n.otp-input:valid {\n  border-color: var(--otp-success);\n}\n\n.otp-btn {\n  width: 100%;\n  height: 56px;\n  background: var(--otp-primary);\n  color: white;\n  border: none;\n  border-radius: var(--otp-radius);\n  font-size: 1rem;\n  font-weight: 500;\n  font-family: inherit;\n  cursor: pointer;\n  position: relative;\n  overflow: hidden;\n  transition: all 0.3s var(--otp-transition);\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  gap: 0.5rem;\n}\n\n.otp-btn::before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: -100%;\n  width: 100%;\n  height: 100%;\n  background: linear-gradient(90deg, transparent, rgba(255,255,255,0.2), transparent);\n  transition: left 0.5s var(--otp-transition);\n}\n\n.otp-btn:hover::before {\n  left: 100%;\n}\n\n.otp-btn:hover:not(:disabled) {\n  background: var(--otp-primary-light);\n  transform: translateY(-2px);\n  box-shadow: 0 8px 30px rgba(0,0,0,0.2);\n}\n\n.otp-btn:active:not(:disabled) {\n  transform: translateY(-1px);\n}\n\n.otp-btn:disabled {\n  background: #e5e5e5;\n  color: #999;\n  cursor: not-allowed;\n  transform: none;\n}\n\n.otp-loading-container {\n  display: none;\n  text-align: center;\n  padding: 3rem 0;\n}\n\n.otp-loading-ring {\n  position: relative;\n  width: 60px;\n  height: 60px;\n  margin: 0 auto 2rem;\n}\n\n.otp-loading-ring div {\n  position: absolute;\n  width: 48px;\n  height: 48px;\n  border: 3px solid transparent;\n  border-top: 3px solid var(--otp-accent);\n  border-radius: 50%;\n  animation: otp-spin 1.2s cubic-bezier(0.5, 0, 0.5, 1) infinite;\n}\n\n.otp-loading-ring div:nth-child(1) { animation-delay: -0.45s; }\n.otp-loading-ring div:nth-child(2) { animation-delay: -0.3s; }\n.otp-loading-ring div:nth-child(3) { animation-delay: -0.15s; }\n\n@keyframes otp-spin {\n  0% { transform: rotate(0deg); }\n  100% { transform: rotate(360deg); }\n}\n\n.otp-result {\n  display: none;\n  margin-top: 1.5rem;\n  padding: 1.5rem;\n  background: #f8fffe;\n  border: 2px solid #e6fffa;\n  border-radius: var(--otp-radius);\n  animation: otp-slideUp 0.5s var(--otp-transition);\n  position: relative;\n  overflow: hidden;\n}\n\n@keyframes otp-slideUp {\n  from { opacity: 0; transform: translateY(20px); }\n  to { opacity: 1; transform: translateY(0); }\n}\n\n.otp-result-label {\n  font-size: 0.85rem;\n  color: var(--otp-success);\n  font-weight: 500;\n  margin-bottom: 0.5rem;\n  text-transform: uppercase;\n  letter-spacing: 0.5px;\n}\n\n.otp-result-value {\n  font-size: 2rem;\n  font-weight: 700;\n  color: var(--otp-text);\n  text-align: center;\n  margin-bottom: 1rem;\n  padding: 1rem;\n  background: white;\n  border-radius: 8px;\n  border: 1px solid #e6fffa;\n  letter-spacing: 4px;\n  font-family: 'Monaco', 'Menlo', monospace;\n}\n\n.otp-timer-container {\n  margin-bottom: 1rem;\n}\n\n.otp-timer-label {\n  font-size: 0.8rem;\n  color: var(--otp-text-light);\n  text-align: center;\n  margin-bottom: 0.5rem;\n}\n\n.otp-progress-bar {\n  width: 100%;\n  height: 8px;\n  background: #f0f0f0;\n  border-radius: 4px;\n  overflow: hidden;\n  margin-bottom: 0.5rem;\n}\n\n.otp-progress-fill {\n  height: 100%;\n  background: linear-gradient(90deg, var(--otp-success), var(--otp-warning), var(--otp-error));\n  border-radius: 4px;\n  transition: width 1s linear;\n}\n\n.otp-timer-text {\n  font-size: 1.1rem;\n  font-weight: 600;\n  text-align: center;\n  color: var(--otp-text);\n}\n\n.otp-timer-text.warning {\n  color: var(--otp-warning);\n}\n\n.otp-timer-text.danger {\n  color: var(--otp-error);\n  animation: pulse 1s infinite;\n}\n\n@keyframes pulse {\n  0%, 100% { opacity: 1; }\n  50% { opacity: 0.6; }\n}\n\n.otp-copy-btn {\n  width: 100%;\n  height: 44px;\n  background: transparent;\n  color: var(--otp-success);\n  border: 2px solid var(--otp-success);\n  border-radius: 8px;\n  font-size: 0.9rem;\n  font-weight: 500;\n  cursor: pointer;\n  transition: all 0.3s var(--otp-transition);\n}\n\n.otp-copy-btn span {\n  position: relative;\n  z-index: 1;\n  transition: color 0.3s var(--otp-transition);\n}\n\n.otp-copy-btn:hover {\n  color: white;\n  background: var(--otp-success);\n}\n\n.otp-error {\n  display: none;\n  margin-top: 1.5rem;\n  padding: 1.25rem;\n  background: #fef2f2;\n  border: 2px solid #fecaca;\n  border-radius: var(--otp-radius);\n  color: var(--otp-error);\n  font-size: 0.95rem;\n  text-align: center;\n  animation: otp-shake 0.5s var(--otp-transition);\n}\n\n@keyframes otp-shake {\n  0%, 100% { transform: translateX(0); }\n  25% { transform: translateX(-4px); }\n  75% { transform: translateX(4px); }\n}\n\n.otp-success-state .otp-container {\n  border-color: var(--otp-success);\n  box-shadow: 0 8px 40px rgba(0,200,81,0.15);\n}\n\n@media (max-width: 480px) {\n  .otp-finder-wrapper { padding: 1rem; }\n  .otp-header { padding: 2rem 1.5rem 1rem; }\n  .otp-form { padding: 0 1.5rem 2rem; }\n  .otp-container h1 { font-size: 1.5rem; }\n  .otp-input, .otp-btn { height: 52px; font-size: 16px; }\n  .otp-result-value { font-size: 1.8rem; letter-spacing: 3px; }\n}\n<\/style><div class=\"otp-finder-wrapper\">\n  <div class=\"otp-container\" id=\"otpContainer\">\n    <div class=\"otp-header\">\n      <div class=\"otp-logo\" id=\"otpLogo\"><\/div>\n      <h1>\u83b7\u53d62FA OTP\u7801<\/h1>\n      <p class=\"otp-subtitle\">\u8f93\u5165\u5bc6\u94a5\u4ee5\u751f\u6210OTP<\/p>\n    <\/div>\n\n    <div class=\"otp-form\" id=\"otpFormSection\">\n      <form id=\"otpForm\" action=\"\">\n        <div class=\"otp-input-group\">\n          <input type=\"text\" class=\"otp-input\" id=\"otpSecretCode\" placeholder=\"UNKBTEK5TNUEQULO7FK7AKGOHZILXTCO\" required autocomplete=\"off\" spellcheck=\"false\">\n        <\/div>\n        <button type=\"submit\" class=\"otp-btn\" id=\"otpSubmitBtn\">\n          <span id=\"otpBtnText\">\u751f\u6210OTP\u7801<\/span>\n        <\/button>\n      <input type=\"hidden\" name=\"trp-form-language\" value=\"zh\"\/><\/form>\n\n      <div class=\"otp-result\" id=\"otpResult\">\n        <div class=\"otp-result-label\">OTP\u7801<\/div>\n        <div class=\"otp-result-value\" id=\"otpResultValue\"><\/div>\n        \n        <div class=\"otp-timer-container\">\n          <div class=\"otp-timer-label\">\u5269\u4f59\u65f6\u95f4<\/div>\n          <div class=\"otp-progress-bar\">\n            <div class=\"otp-progress-fill\" id=\"otpProgressFill\"><\/div>\n          <\/div>\n          <div class=\"otp-timer-text\" id=\"otpTimerText\">30\u79d2<\/div>\n        <\/div>\n\n        <button type=\"button\" class=\"otp-copy-btn\" id=\"otpCopyBtn\">\n          <span>\u590d\u5236OTP\u7801<\/span>\n        <\/button>\n      <\/div>\n\n      <div class=\"otp-error\" id=\"otpError\"><\/div>\n    <\/div>\n\n    <div class=\"otp-loading-container\" id=\"otpLoading\">\n      <div class=\"otp-loading-ring\">\n        <div><\/div><div><\/div><div><\/div>\n      <\/div>\n      <div class=\"otp-loading-text\">\u6b63\u5728\u751f\u6210 OTP \u4ee3\u7801\u2026<\/div>\n    <\/div>\n  <\/div>\n<\/div><script>\ndocument.addEventListener('DOMContentLoaded', function() {\n  const otpForm = document.getElementById('otpForm');\n  if (!otpForm) return; \/\/ Tho\u00e1t n\u1ebfu kh\u00f4ng t\u00ecm th\u1ea5y form, tr\u00e1nh l\u1ed7i\n\n  const input = document.getElementById('otpSecretCode');\n  const submitBtn = document.getElementById('otpSubmitBtn');\n  const formSection = document.getElementById('otpFormSection');\n  const loading = document.getElementById('otpLoading');\n  const result = document.getElementById('otpResult');\n  const resultValue = document.getElementById('otpResultValue');\n  const copyBtn = document.getElementById('otpCopyBtn');\n  const error = document.getElementById('otpError');\n  const container = document.getElementById('otpContainer');\n  const progressFill = document.getElementById('otpProgressFill');\n  const timerText = document.getElementById('otpTimerText');\n\n  let currentOTP = '';\n  let timerInterval = null;\n  let remainingTime = 30;\n\n  otpForm.addEventListener('submit', async function(e) {\n    e.preventDefault();\n    const secretCode = input.value.trim().toUpperCase();\n    if (!secretCode) return;\n\n    setLoadingState(true);\n\n    try {\n      const response = await fetch('https:\/\/auto.dpsmedia.vn\/webhook\/655cf4ab-21b3-4f2b-be89-707993121ca3', {\n        method: 'POST',\n        headers: { 'Content-Type': 'application\/json' },\n        body: JSON.stringify({ secret: secretCode })\n      });\n      const data = await response.json();\n      \n      await new Promise(resolve => setTimeout(resolve, 800));\n      setLoadingState(false);\n\n      if (response.ok && data?.otp) {\n        showSuccess(data.otp);\n        startTimer();\n      } else {\n        showError(data?.error || 'Kh\u00f4ng th\u1ec3 t\u1ea1o m\u00e3 OTP. Vui l\u00f2ng ki\u1ec3m tra l\u1ea1i m\u00e3 secret.');\n      }\n    } catch (err) {\n      await new Promise(resolve => setTimeout(resolve, 800));\n      setLoadingState(false);\n      showError('\u0110\u00e3 x\u1ea3y ra l\u1ed7i k\u1ebft n\u1ed1i. Vui l\u00f2ng th\u1eed l\u1ea1i.');\n    }\n  });\n\n  function setLoadingState(isLoading) {\n    if (isLoading) {\n      formSection.style.display = 'none';\n      loading.style.display = 'block';\n      submitBtn.disabled = true;\n      container.style.height = container.offsetHeight + 'px';\n    } else {\n      loading.style.display = 'none';\n      formSection.style.display = 'block';\n      submitBtn.disabled = false;\n      container.style.height = 'auto';\n    }\n  }\n\n  function showSuccess(otp) {\n    currentOTP = otp;\n    resultValue.textContent = otp;\n    result.style.display = 'block';\n    error.style.display = 'none';\n    document.body.classList.add('otp-success-state');\n    result.scrollIntoView({ behavior: 'smooth', block: 'center' });\n  }\n\n  function showError(message) {\n    error.textContent = message;\n    error.style.display = 'block';\n    result.style.display = 'none';\n    document.body.classList.remove('otp-success-state');\n    stopTimer();\n  }\n\n  function startTimer() {\n    remainingTime = 30;\n    updateTimer();\n    \n    if (timerInterval) {\n      clearInterval(timerInterval);\n    }\n\n    timerInterval = setInterval(() => {\n      remainingTime--;\n      updateTimer();\n      \n      if (remainingTime <= 0) {\n        stopTimer();\n        showExpiredMessage();\n      }\n    }, 1000);\n  }\n\n  function updateTimer() {\n    const percentage = (remainingTime \/ 30) * 100;\n    progressFill.style.width = percentage + '%';\n    timerText.textContent = remainingTime + 's';\n    \n    \/\/ Thay \u0111\u1ed5i m\u00e0u s\u1eafc theo th\u1eddi gian c\u00f2n l\u1ea1i\n    timerText.className = 'otp-timer-text';\n    if (remainingTime <= 5) {\n      timerText.classList.add('danger');\n    } else if (remainingTime <= 10) {\n      timerText.classList.add('warning');\n    }\n  }\n\n  function stopTimer() {\n    if (timerInterval) {\n      clearInterval(timerInterval);\n      timerInterval = null;\n    }\n  }\n\n  function showExpiredMessage() {\n    resultValue.style.opacity = '0.5';\n    timerText.textContent = 'H\u1ebft h\u1ea1n';\n    timerText.className = 'otp-timer-text danger';\n    progressFill.style.width = '0%';\n    \n    \/\/ Hi\u1ec3n th\u1ecb th\u00f4ng b\u00e1o h\u1ebft h\u1ea1n\n    const expiredMsg = document.createElement('div');\n    expiredMsg.style.cssText = `\n      margin-top: 1rem;\n      padding: 0.75rem;\n      background: #fff3cd;\n      border: 1px solid #ffeaa7;\n      border-radius: 8px;\n      color: #856404;\n      text-align: center;\n      font-size: 0.9rem;\n    `;\n    expiredMsg.textContent = 'M\u00e3 OTP \u0111\u00e3 h\u1ebft h\u1ea1n. Vui l\u00f2ng t\u1ea1o m\u00e3 m\u1edbi.';\n    result.appendChild(expiredMsg);\n  }\n\n  copyBtn.addEventListener('click', async function() {\n    if (!currentOTP || remainingTime <= 0) return;\n    \n    try {\n      await navigator.clipboard.writeText(currentOTP);\n      const originalText = this.querySelector('span').textContent;\n      this.querySelector('span').textContent = '\u0110\u00e3 sao ch\u00e9p!';\n      this.style.background = 'var(--otp-success)';\n      this.querySelector('span').style.color = 'white';\n      \n      setTimeout(() => {\n        this.querySelector('span').textContent = originalText;\n        this.style.background = 'transparent';\n        this.querySelector('span').style.color = 'var(--otp-success)';\n      }, 2000);\n    } catch (err) {\n      console.error('Failed to copy: ', err);\n    }\n  });\n\n  input.addEventListener('input', function() {\n    const value = this.value.trim();\n    \/\/ Chuy\u1ec3n \u0111\u1ed5i th\u00e0nh ch\u1eef hoa v\u00e0 ki\u1ec3m tra \u0111\u1ecbnh d\u1ea1ng c\u01a1 b\u1ea3n\n    this.value = value.toUpperCase();\n    const isValid = value === '' || \/^[A-Z2-7]{16,}$\/.test(value);\n    this.style.borderColor = isValid ? 'var(--otp-border)' : 'var(--otp-error)';\n  });\n\n  \/\/ D\u1ecdn d\u1eb9p timer khi trang \u0111\u01b0\u1ee3c \u0111\u00f3ng\n  window.addEventListener('beforeunload', function() {\n    stopTimer();\n  });\n});\n<\/script><h3 class=\"wp-block-heading\">\u514d\u8d392FA OTP\u7801\u751f\u6210\u5de5\u5177 \u2013 \u4e00\u952e\u4fdd\u62a4\u6570\u636e\u5b89\u5168<\/h3><h2 class=\"wp-block-heading\">\u8f7b\u677e\u751f\u6210OTP\u7801 \u2013 \u65e0\u9700\u5b89\u88c5\u5e94\u7528 \u2013 \u6700\u5927\u5b89\u5168\u4fdd\u969c<\/h2><p>\u60a8\u662f\u5426\u9700\u8981\u4e00\u4e2aOTP\u7801\u6765\u9a8c\u8bc1\u7cfb\u7edf\u3001\u8d26\u6237\u6216\u67d0\u4e2a\u5e94\u7528\u7684\u4e24\u6b65\u9a8c\u8bc1\uff1f\u60a8\u4e0d\u60f3\u5b89\u88c5Google Authenticator\u6216\u4f7f\u7528\u624b\u673a\u626b\u63cf\u4e8c\u7ef4\u7801\u5417\uff1f <a class=\"wpil_keyword_link\" href=\"https:\/\/dps.media\/zh\/\" title=\"DPS.MEDIA \u80a1\u4efd\u516c\u53f8\" data-wpil-keyword-link=\"linked\" data-wpil-monitor-id=\"33\">DPS.MEDIA<\/a> \u4e3a\u60a8\u5e26\u6765 <strong>\u5b8c\u5168\u514d\u8d39\u7684\u5728\u7ebf2FA OTP\u7801\u751f\u6210\u5de5\u5177<\/strong>\uff0c\u53ea\u9700\u8f93\u5165 <strong>\u5bc6\u94a5\u7801<\/strong> \u5373\u53ef\u7acb\u5373\u51c6\u786e\u751f\u6210OTP\u7801\u3002<\/p><hr class=\"wp-block-separator has-alpha-channel-opacity\"><h2 class=\"wp-block-heading\">\u2705 \u5de5\u5177\u7684\u4e3b\u8981\u529f\u80fd\uff1a<\/h2><ul class=\"wp-block-list\">\n<li><strong>\u751f\u62106\u4f4d\u6570OTP\u7801<\/strong> \u7b26\u5408TOTP\uff08\u57fa\u4e8e\u65f6\u95f4\u7684\u4e00\u6b21\u6027\u5bc6\u7801\uff09\u6807\u51c6\u3002<\/li>\n\n\n\n<li><strong>100%\u514d\u8d39\uff0c100%<\/strong>\u65e0\u9700\u767b\u5f55\u6216\u63d0\u4f9b\u4e2a\u4eba\u4fe1\u606f\u3002<\/li>\n\n\n\n<li><strong>\u4e0d\u4fdd\u5b58\u4efb\u4f55\u6570\u636e<\/strong>\uff0c\u786e\u4fdd\u7edd\u5bf9\u9690\u79c1\u5b89\u5168\u3002<\/li>\n\n\n\n<li><strong>\u8f7b\u677e\u590d\u5236\u4ee3\u7801<\/strong> \u53ea\u9700\u4e00\u952e\u70b9\u51fb\u3002<\/li>\n\n\n\n<li><strong>\u7cbe\u786e\u5012\u8ba1\u65f6<\/strong> \u5e2e\u52a9\u60a8\u4e86\u89e3OTP\u7801\u5931\u6548\u524d\u5269\u4f59\u79d2\u6570\u3002<\/li>\n\n\n\n<li><strong>\u76f4\u89c2\u754c\u9762<\/strong>\uff0c\u5373\u4f7f\u975e\u4e13\u4e1a\u4eba\u58eb\u4e5f\u80fd\u8f7b\u677e\u4f7f\u7528\u3002<\/li>\n<\/ul><hr class=\"wp-block-separator has-alpha-channel-opacity\"><h2 class=\"wp-block-heading\">\ud83d\udca1 \u8be5\u5de5\u5177\u9002\u5408\u8c01\uff1f<\/h2><ul class=\"wp-block-list\">\n<li><strong>\u5e02\u573a\u8425\u9500\u4eba\u5458\uff0c\u5e7f\u544a\u4e3b\u7ba1<\/strong>\uff1a\u7ecf\u5e38\u9700\u8981\u767b\u5f55\u542f\u7528\u53cc\u91cd\u8ba4\u8bc1\u7684\u8d26\u6237\u3002<\/li>\n\n\n\n<li><strong>Dev \u4e0e\u6280\u672f\u5458<\/strong>\uff1a\u9700\u8981\u751f\u6210OTP\u7801\u4ee5\u6d4b\u8bd5API\u3001\u670d\u52a1\u5668\u6216\u5b89\u5168\u5e94\u7528\u3002<\/li>\n\n\n\n<li><strong>\u7cfb\u7edf\u7ba1\u7406\u5458<\/strong>\uff1a\u5e0c\u671b\u5feb\u901f\u9a8c\u8bc1\u8bbf\u95ee\u6743\u9650\uff0c\u65e0\u9700\u4f9d\u8d56\u989d\u5916\u8bbe\u5907\u3002<\/li>\n\n\n\n<li><strong>\u666e\u901a\u7528\u6237<\/strong>\uff1a\u9700\u8981\u6062\u590dOTP\u7801\u4f46\u624b\u673a\u6216OTP\u5e94\u7528\u5df2\u4e0d\u53ef\u7528\u3002<\/li>\n<\/ul><hr class=\"wp-block-separator has-alpha-channel-opacity\"><h2 class=\"wp-block-heading\">\ud83d\udd10 \u4e3a\u4ec0\u4e48\u9009\u62e9DPS.MEDIA\u7684OTP\u5de5\u5177\uff1f<\/h2><ul class=\"wp-block-list\">\n<li><strong>\u6781\u5feb\u7684\u4ee3\u7801\u751f\u6210\u901f\u5ea6<\/strong>\uff0c\u65e0\u9700\u5b89\u88c5\u8f6f\u4ef6\u3002<\/li>\n\n\n\n<li><strong>\u591a\u8bbe\u5907\u5de5\u4f5c\u65f6\u7684\u4fbf\u5229<\/strong>\uff0c\u5c24\u5176\u662f\u5728\u684c\u9762\/\u7b14\u8bb0\u672c\u7535\u8111\u4e0a\u3002<\/li>\n\n\n\n<li><strong>\u900f\u660e\u5ea6<\/strong> \u2013 \u5de5\u5177\u4e0d\u4fdd\u5b58\u5bc6\u94a5\uff0c\u4e0d\u8ddf\u8e2a\u7528\u6237\u884c\u4e3a\u3002<\/li>\n\n\n\n<li><strong>\u4e3a\u8d8a\u5357\u7528\u6237\u4f18\u5316<\/strong>\uff0c\u652f\u6301\u56e2\u961f\u8fd0\u8425\u3001\u4ee3\u7406\u673a\u6784\u6216\u81ea\u7531\u804c\u4e1a\u8005\u8f7b\u677e\u4f7f\u7528\u3002<\/li>\n<\/ul><hr class=\"wp-block-separator has-alpha-channel-opacity\"><h2 class=\"wp-block-heading\">\ud83d\udc49 \u7b80\u5355\u7684\u4f7f\u7528\u65b9\u6cd5\uff1a<\/h2><p><\/p><p>\u5c06OTP\u5bc6\u94a5\u7c98\u8d34\u5230\u8f93\u5165\u6846\u3002<\/p><p>\u70b9\u51fb\u201c\u751f\u6210OTP\u7801\u201d\u3002<\/p><p>6\u4f4d\u6570\u7684OTP\u7801\u5c06\u7acb\u5373\u663e\u793a\uff0c\u5e76\u9644\u5e26\u5269\u4f59\u65f6\u95f4\u3002<\/p><p><\/p>","protected":false},"excerpt":{"rendered":"<p>L\u1ea5y M\u00e3 OTP 2FA Nh\u1eadp m\u00e3 secret \u0111\u1ec3 t\u1ea1o OTP T\u1ea1o M\u00e3 OTP M\u00e3 OTP Th\u1eddi gian c\u00f2n l\u1ea1i 30s Sao ch\u00e9p m\u00e3 OTP \u0110ang t\u1ea1o m\u00e3 OTP\u2026 const input = document.getElementById(&#8216;otpSecretCode&#8217;); const submitBtn = document.getElementById(&#8216;otpSubmitBtn&#8217;); const formSection = document.getElementById(&#8216;otpFormSection&#8217;); const loading = document.getElementById(&#8216;otpLoading&#8217;); const result = document.getElementById(&#8216;otpResult&#8217;); const resultValue = document.getElementById(&#8216;otpResultValue&#8217;); const copyBtn = [&hellip;]<\/p>","protected":false},"author":1,"featured_media":27541,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-27697","page","type-page","status-publish","has-post-thumbnail","hentry"],"acf":[],"rankmath_keywords":{"primary":"","secondary":[""]},"yoast_keywords":{"primary":"","secondary":[]},"yoast_focuskw":"","rankmath_focuskw":"","seo_keywords":{"primary":"","secondary":[""]},"_links":{"self":[{"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/pages\/27697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/comments?post=27697"}],"version-history":[{"count":2,"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/pages\/27697\/revisions"}],"predecessor-version":[{"id":32451,"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/pages\/27697\/revisions\/32451"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/media\/27541"}],"wp:attachment":[{"href":"https:\/\/dps.media\/zh\/wp-json\/wp\/v2\/media?parent=27697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}