| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="utf-8">
- <meta content="width=device-width, initial-scale=1.0" name="viewport">
- <title>SSO 登录回调</title>
- <script src="{{ url_for('static', filename='js/tailwindcss.js') }}"></script>
- <link href="{{ url_for('static', filename='fontawesome/css/all.min.css') }}" rel="stylesheet">
- <link href="{{ url_for('static', filename='css/style.css') }}" rel="stylesheet">
- </head>
- <body class="min-h-screen flex items-center justify-center" style="background-color: #0a192f;">
- <div class="tech-panel p-10 rounded-xl w-full max-w-md shadow-2xl border-blue-500/50 text-center">
- <div id="loading-view">
- <i class="fas fa-spinner fa-spin text-5xl text-cyan-400 mb-6"></i>
- <h2 class="text-2xl font-bold text-cyan-300 mb-2">SSO 登录中</h2>
- <p class="text-gray-400">正在验证身份,请稍候...</p>
- </div>
- <div id="error-view" class="hidden">
- <i class="fas fa-exclamation-circle text-5xl text-red-400 mb-6"></i>
- <h2 class="text-2xl font-bold text-red-300 mb-2">登录失败</h2>
- <p id="error-message" class="text-gray-400 mb-6"></p>
- <a href="{{ url_for('main.login') }}" class="tech-button inline-block px-6 py-3 bg-cyan-600 hover:bg-cyan-500 text-white font-bold rounded-lg transition duration-300">
- <i class="fas fa-arrow-left mr-2"></i> 返回登录页
- </a>
- </div>
- <div id="success-view" class="hidden">
- <i class="fas fa-check-circle text-5xl text-green-400 mb-6"></i>
- <h2 class="text-2xl font-bold text-green-300 mb-2">登录成功</h2>
- <p class="text-gray-400">正在跳转首页...</p>
- </div>
- </div>
- <script>
- (async function () {
- const code = '{{ code }}';
- const loadingView = document.getElementById('loading-view');
- const errorView = document.getElementById('error-view');
- const successView = document.getElementById('success-view');
- const errorMessage = document.getElementById('error-message');
- if (!code) {
- showError('缺少授权码');
- return;
- }
- try {
- const response = await fetch('/api/oauth/exchange-code', {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({ code: code })
- });
- const result = await response.json();
- if (result.code === '000000') {
- // 保存 Token
- localStorage.setItem('token', result.data.token);
- localStorage.setItem('refresh_token', result.data.refresh_token);
- localStorage.setItem('user', JSON.stringify(result.data.user));
- // 显示成功,跳转首页
- loadingView.classList.add('hidden');
- successView.classList.remove('hidden');
- setTimeout(function () {
- window.location.href = '{{ url_for("main.dashboard") }}';
- }, 800);
- } else {
- showError(result.message || '登录失败');
- }
- } catch (err) {
- showError('网络请求失败: ' + err.message);
- }
- function showError(msg) {
- loadingView.classList.add('hidden');
- errorMessage.textContent = msg;
- errorView.classList.remove('hidden');
- }
- })();
- </script>
- </body>
- </html>
|