Files
SMANAGE/backup/GERP old/setup2fa.html
T

128 lines
6.4 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>设置双因素认证 (2FA)</title>
<link href="https://tailwind.gvsds.com" rel="stylesheet">
<link href="https://cdn.gvsds.com/font-awesome/css/all.min.css" rel="stylesheet" media="print" onload="this.media='all'">
</head>
<body class="bg-gray-100 min-h-screen">
<div class="container mx-auto px-4 py-8 max-w-3xl">
<header class="mb-8">
<h1 class="text-3xl font-bold text-gray-800">设置双因素认证 (2FA)</h1>
<p class="text-gray-600 mt-2">增强您账户的安全性</p>
</header>
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
<div class="mb-6">
{% for category, message in messages %}
<div class="p-4 rounded-md {% if category == 'success' %}bg-green-100 text-green-800{% else %}bg-red-100 text-red-800{% endif %}">
{{ message }}
</div>
{% endfor %}
</div>
{% endif %}
{% endwith %}
<div class="bg-white rounded-lg shadow-md p-6 mb-6">
{% if existing2fa and existing2fa.IsEnabled == 1 %}
<div class="mb-4 p-4 bg-green-50 border border-green-200 rounded-md">
<p class="text-green-800"><i class="fas fa-check-circle mr-2"></i>双因素认证已启用</p>
</div>
{% endif %}
{% if step == 1 %}
<div class="mb-6">
<h2 class="text-xl font-semibold mb-3">什么是双因素认证?</h2>
<p class="text-gray-700 mb-4">
双因素认证 (2FA) 为您的账户增加了额外的安全层。启用后,登录时除了密码外,
您还需要输入通过手机应用生成的验证码。
</p>
<p class="text-gray-700 mb-4">
设置过程:
</p>
<ol class="list-decimal list-inside text-gray-700 mb-4 pl-4">
<li>点击"开始设置"按钮生成一个二维码</li>
<li>使用认证应用(如Google Authenticator、Authy等)扫描二维码</li>
<li>输入应用生成的6位验证码完成验证</li>
</ol>
</div>
<form method="post" class="flex flex-col sm:flex-row gap-4">
<button type="submit" name="generate" class="bg-blue-600 text-white py-2 px-6 rounded-md hover:bg-blue-700 transition duration-200 flex-1">
<i class="fas fa-qrcode mr-2"></i>开始设置
</button>
{% if existing2fa and existing2fa.IsEnabled == 1 %}
<button type="submit" name="disable" class="bg-red-600 text-white py-2 px-6 rounded-md hover:bg-red-700 transition duration-200 flex-1">
<i class="fas fa-times-circle mr-2"></i>禁用2FA
</button>
{% endif %}
</form>
{% endif %}
{% if step == 2 %}
<div class="mb-6">
<h2 class="text-xl font-semibold mb-3">扫描二维码</h2>
<p class="text-gray-700 mb-4">
使用您的认证应用(如Google Authenticator、Authy等)扫描下方的二维码,
或手动输入密钥:<strong class="bg-gray-100 px-2 py-1 rounded">{{ secret }}</strong>
</p>
<div class="flex justify-center mb-6">
<div class="bg-white p-4 border border-gray-200 rounded-md shadow-sm">
<img src="data:image/png;base64,{{ qr_code }}" alt="2FA 二维码" class="max-w-full h-auto">
</div>
</div>
<p class="text-gray-700 mb-4">
扫描完成后,输入应用生成的6位验证码以完成设置:
</p>
<form method="post">
<div class="mb-4">
<label for="token" class="block text-gray-700 mb-2">验证码</label>
<input type="text" id="token" name="token"
class="w-full px-4 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500"
placeholder="6位数字验证码" maxlength="6" required>
</div>
<div class="flex gap-4">
<button type="submit" name="verify" class="bg-green-600 text-white py-2 px-6 rounded-md hover:bg-green-700 transition duration-200">
<i class="fas fa-check mr-2"></i>验证并启用
</button>
<a href="{{ url_for('GERP.Setup2fa') }}" class="bg-gray-600 text-white py-2 px-6 rounded-md hover:bg-gray-700 transition duration-200">
<i class="fas fa-arrow-left mr-2"></i>返回
</a>
</div>
</form>
</div>
{% endif %}
</div>
<div class="text-center">
<a href="/" class="text-blue-600 hover:text-blue-800 transition duration-200">
<i class="fas fa-home mr-1"></i>返回首页
</a>
</div>
</div>
<script>
// 自动聚焦到验证码输入框
document.addEventListener('DOMContentLoaded', function() {
const tokenInput = document.getElementById('token');
if (tokenInput) {
tokenInput.focus();
// 只允许输入数字
tokenInput.addEventListener('input', function(e) {
this.value = this.value.replace(/[^0-9]/g, '');
});
}
});
</script>
</body>
</html>