122 lines
3.3 KiB
JavaScript
122 lines
3.3 KiB
JavaScript
/**
|
||
* auth.js — 团队登录前端逻辑
|
||
*
|
||
* 开发者编号免配置登录:
|
||
* 1. 选择/输入开发者编号(如 DEV-002)
|
||
* 2. 后端验证编号 → 返回会话 token
|
||
* 3. 自动绑定团队 API → 直接进入对话
|
||
* 4. 不需要手动输入任何 API Key
|
||
*
|
||
* 版权:国作登字-2026-A-00037559
|
||
*/
|
||
|
||
'use strict';
|
||
|
||
var TeamAuth = (function() {
|
||
|
||
/**
|
||
* 团队登录 — 开发者编号直接进
|
||
* @param {string} devId - 开发者编号(如 DEV-002)
|
||
* @returns {Promise<Object>} 登录结果
|
||
*/
|
||
async function teamLogin(devId) {
|
||
try {
|
||
var response = await fetch('/api/auth/team-login', {
|
||
method: 'POST',
|
||
headers: { 'Content-Type': 'application/json' },
|
||
body: JSON.stringify({ devId: devId })
|
||
});
|
||
|
||
var data = await response.json();
|
||
|
||
if (data.success) {
|
||
// 存储会话 token(sessionStorage,关闭标签页即清除)
|
||
sessionStorage.setItem('team_session_token', data.sessionToken);
|
||
localStorage.setItem('team_dev_id', devId);
|
||
localStorage.setItem('team_dev_name', data.devName);
|
||
localStorage.setItem('team_dev_level', String(data.level));
|
||
localStorage.setItem('team_dev_channel', data.channel);
|
||
// API Key 不存前端,后端代理所有 API 调用
|
||
|
||
return { success: true, data: data };
|
||
} else {
|
||
return { success: false, message: data.message || '开发者编号不存在,请检查。' };
|
||
}
|
||
} catch (err) {
|
||
return { success: false, message: '连接失败,请稍后重试。' };
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 验证当前会话
|
||
* @returns {Promise<Object>}
|
||
*/
|
||
async function verifySession() {
|
||
var token = sessionStorage.getItem('team_session_token');
|
||
if (!token) return { valid: false };
|
||
|
||
try {
|
||
var response = await fetch('/api/auth/verify', {
|
||
headers: { 'Authorization': 'Bearer ' + token }
|
||
});
|
||
return await response.json();
|
||
} catch (err) {
|
||
return { valid: false };
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 注销
|
||
*/
|
||
async function logout() {
|
||
var token = sessionStorage.getItem('team_session_token');
|
||
if (token) {
|
||
try {
|
||
await fetch('/api/auth/logout', {
|
||
method: 'POST',
|
||
headers: { 'Authorization': 'Bearer ' + token }
|
||
});
|
||
} catch (err) {
|
||
// 静默失败
|
||
}
|
||
}
|
||
sessionStorage.removeItem('team_session_token');
|
||
localStorage.removeItem('team_dev_id');
|
||
localStorage.removeItem('team_dev_name');
|
||
localStorage.removeItem('team_dev_level');
|
||
localStorage.removeItem('team_dev_channel');
|
||
}
|
||
|
||
/**
|
||
* 获取当前会话 token(用于 API 请求头)
|
||
* @returns {string|null}
|
||
*/
|
||
function getSessionToken() {
|
||
return sessionStorage.getItem('team_session_token') || null;
|
||
}
|
||
|
||
/**
|
||
* 获取已登录的开发者信息
|
||
* @returns {Object|null}
|
||
*/
|
||
function getDevInfo() {
|
||
var devId = localStorage.getItem('team_dev_id');
|
||
if (!devId) return null;
|
||
return {
|
||
devId: devId,
|
||
name: localStorage.getItem('team_dev_name') || '',
|
||
level: parseInt(localStorage.getItem('team_dev_level') || '0', 10),
|
||
channel: localStorage.getItem('team_dev_channel') || ''
|
||
};
|
||
}
|
||
|
||
return {
|
||
teamLogin: teamLogin,
|
||
verifySession: verifySession,
|
||
logout: logout,
|
||
getSessionToken: getSessionToken,
|
||
getDevInfo: getDevInfo
|
||
};
|
||
|
||
})();
|