登录 Widget 是一个轻量 Headless SDK(0.8KB),通过 login() 函数调用 New API 登录接口。不注入任何 DOM 或样式,你完全控制 UI。
仅支持密码登录。
<script src="https://lancerouter.ai/static/login-widget.js"></script>
<script>
const result = await NewApiLoginWidget.login({
apiUrl: 'https://lancerouter.ai',
username: 'user',
password: 'pass'
});
if (result.success) {
console.log('登录成功', result.data);
} else {
console.log('登录失败', result.message);
}
</script>
NewApiLoginWidget.login(options)| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
apiUrl |
string |
是 | New API 服务地址 |
username |
string |
是 | 用户名或邮箱 |
password |
string |
是 | 密码 |
返回值: Promise<{ success: boolean, data?: object, message?: string }>
成功:
{
"success": true,
"data": {
"id": 1,
"username": "user",
"display_name": "用户",
"role": 1,
"status": 1,
"group": "default"
}
}
失败:
{
"success": false,
"message": "用户名或密码错误,或用户已被封禁"
}
| 字段 | 类型 | 说明 |
|---|---|---|
id |
number | 用户 ID,调用其他 API 时需要 |
username |
string | 用户名 |
display_name |
string | 显示名称 |
role |
number | 角色(1=普通,10+=管理员,100+=超管) |
status |
number | 状态 |
group |
string | 用户组 |
登录成功后浏览器会自动存储 session cookie,后续请求带 credentials: 'include' 和 New-Api-User 头即可。
const res = await fetch('https://lancerouter.ai/api/user/self', {
credentials: 'include',
headers: { 'New-Api-User': String(result.data.id) }
});
const data = await res.json();
const res = await fetch('https://lancerouter.ai/api/token/', {
method: 'POST',
credentials: 'include',
headers: {
'Content-Type': 'application/json',
'New-Api-User': String(result.data.id)
},
body: JSON.stringify({
name: 'my-token',
remain_quota: 1000000,
unlimited_quota: false
})
});
const data = await res.json();
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>我的网站</title>
</head>
<body>
<form id="login-form">
<input id="username" placeholder="用户名或邮箱" required>
<input id="password" type="password" placeholder="密码" required>
<button type="submit">登录</button>
</form>
<p id="msg"></p>
<script src="https://lancerouter.ai/static/login-widget.js"></script>
<script>
document.getElementById('login-form').addEventListener('submit', async (e) => {
e.preventDefault();
const result = await NewApiLoginWidget.login({
apiUrl: 'https://lancerouter.ai',
username: document.getElementById('username').value,
password: document.getElementById('password').value,
});
if (result.success) {
localStorage.setItem('user', JSON.stringify(result.data));
document.getElementById('msg').textContent = '欢迎, ' + result.data.username;
} else {
document.getElementById('msg').textContent = result.message;
}
});
</script>
</body>
</html>
Secure 标志,HTTP 页面下浏览器不会存储New-Api-User 头 — 值为登录返回的 data.id,否则接口返回未授权credentials: 'include' — 否则浏览器不会携带 cookie