Appearance
用户登录接口
用于实现用户登录功能,支持通过GET或POST方式传递参数,需填写应用ID、用户账号、密码等必填信息(密码无需加密),应用签名从后台直接获取,登录成功后返回用户信息及用于后续权限校验的令牌。
请求地址 GET / POST
http
https://nobase.cn/api/user/login请求参数
| 参数名 | 类型 | 必选 | 说明 |
|---|---|---|---|
| appid | string | ✅ 是 | 应用ID,从开发者中心获取的应用唯一标识 |
| user | string | ✅ 是 | 用户账号,填写注册时使用的唯一账号(如手机号、用户名) |
| pass | string | ✅ 是 | 用户密码,填写注册时使用的原始密码(无需加密,直接传递) |
| signature | string | ✅ 是 | 应用签名,从后台直接获取(无需手动生成,与appid绑定) |
返回示例
成功响应(登录成功)
json
{
"code": 200,
"msg": "success",
"data": {
"username": "123456",
"nickname": "顾江",
"qq": "未绑定",
"useremail": "未绑定",
"exp": 5,
"grade": 0,
"title": "未佩戴",
"createtime": "2025-02-09 11:48:23",
"logintime": "2025-06-12 17:16:31",
"viptime": "已逾期(4月)",
"Continuous(连续签到)": 0,
"piastrenum(余额货币)": 152,
"likes": 0,
"Continuouslogin(连续登录)": 0,
"signature": "此用户很懒,连签名都没有留下",
"icon": "https://api.xunanit.cn/api/user/avatar/e2d62123d1a16b77cdd5cef19b1205c4.jpg",
"foll(关注数量)": 0,
"fans(粉丝数量)": 0,
"forum(帖子数量)": 0,
"sex(性别1是男2是女)": 1,
"token (用户令牌)": "865ad245ed1564aa1672d32d4284fa3f032dd54f638b1716e9d229206f943fd5",
"token_dead(令牌失效时间)": 1749752367
}
}返回数据结构
| 参数名 | 类型 | 说明 |
|---|---|---|
| code | number | 状态码:200=登录成功,400=参数错误/业务失败,500=系统错误 |
| msg | string | 状态描述:success=成功,fail=失败 |
| data | object/string | 响应数据:code=200时为用户信息对象,code≠200时为错误提示字符串 |
| data.username | string | 用户账号(登录用账号) |
| data.nickname | string | 用户昵称 |
| data.qq | string | 用户QQ号(未绑定则返回“未绑定”) |
| data.useremail | string | 用户邮箱(未绑定则返回“未绑定”) |
| data.exp | number | 用户经验值 |
| data.grade | number | 用户等级 |
| data.title | string | 用户头衔(未佩戴则返回“未佩戴”) |
| data.createtime | string | 用户账号创建时间(格式:YYYY-MM-DD HH:MM:SS) |
| data.logintime | string | 本次登录时间(格式:YYYY-MM-DD HH:MM:SS) |
| data.viptime | string | VIP有效期(逾期则返回“已逾期(xx月)”) |
| data.Continuous(连续签到) | number | 连续签到天数 |
| data.piastrenum(余额货币) | number | 用户余额数量 |
| data.likes | number | 用户获赞数量 |
| data.Continuouslogin(连续登录) | number | 连续登录天数 |
| data.signature | string | 用户个人签名(未设置则返回默认提示) |
| data.icon | string | 用户头像URL地址 |
| data.foll(关注数量) | number | 用户关注人数 |
| data.fans(粉丝数量) | number | 用户粉丝人数 |
| data.forum(帖子数量) | number | 用户发布帖子数量 |
| data.sex(性别1是男2是女) | number | 用户性别(1=男,2=女) |
| data.token (用户令牌) | string | 登录成功后返回的用户令牌(用于后续接口权限校验) |
| data.token_dead(令牌失效时间) | number | 令牌失效时间(时间戳格式,单位:秒) |
代码示例
javascript
// 1. 配置参数(必填项需替换为实际值,signature从后台获取)
const appid = "your_app_id"; // 应用ID(必填)
const signature = "your_signature_from_backend"; // 应用签名(后台获取,必填)
const user = "user123456"; // 登录账号(必填)
const pass = "user_password123"; // 登录密码(无需加密,直接传递原始密码)
// 2. 拼接GET参数
const params = new URLSearchParams({
appid,
signature,
user,
pass
});
// 3. 发起GET请求
const requestUrl = `https://nobase.cn/api/user/login?${params.toString()}`;
fetch(requestUrl)
.then(response => {
if (!response.ok) throw new Error(`HTTP错误:${response.status}`);
return response.json();
})
.then(res => {
if (res.code === 200) {
// 登录成功,存储用户信息和令牌(示例:存localStorage)
const userInfo = res.data;
localStorage.setItem("userToken", userInfo["token (用户令牌)"]);
localStorage.setItem("userNickname", userInfo.nickname);
console.log("登录成功,用户昵称:", userInfo.nickname);
console.log("令牌失效时间:", new Date(userInfo["token_dead(令牌失效时间)"] * 1000).toLocaleString());
} else {
// 登录失败,提示错误
console.error("登录失败:", res.data);
}
})
.catch(error => console.error("请求异常:", error));javascript
// 1. 配置参数(同GET,signature从后台获取)
const appid = "your_app_id";
const signature = "your_signature_from_backend"; // 后台获取的签名
const user = "user123456";
const pass = "user_password123"; // 密码无需加密,直接传递
// 2. 构造POST参数
const params = new URLSearchParams({
appid,
signature,
user,
pass
});
// 3. 发起POST请求
fetch('https://nobase.cn/api/user/login', {
method: 'POST',
body: params,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.then(response => {
if (!response.ok) throw new Error(`HTTP错误:${response.status}`);
return response.json();
})
.then(res => {
if (res.code === 200) {
// 登录成功,处理用户信息
const userInfo = res.data;
console.log("登录成功,用户余额:", userInfo["piastrenum(余额货币)"]);
console.log("用户头像:", userInfo.icon);
} else {
console.error("登录失败:", res.data);
}
})
.catch(error => console.error("请求异常:", error));python
import requests
from datetime import datetime
# 1. 配置参数(必填项需替换为实际值,signature从后台获取)
appid = "your_app_id" # 应用ID(必填)
signature = "your_signature_from_backend" # 应用签名(后台获取,必填)
user = "user123456" # 登录账号(必填)
passwd = "user_password123" # 登录密码(无需加密,直接传递原始密码)
# 2. 构造GET参数
params = {
"appid": appid,
"signature": signature,
"user": user,
"pass": passwd
}
# 3. 发起GET请求
url = "https://nobase.cn/api/user/login"
try:
response = requests.get(url, params=params, timeout=5)
response.raise_for_status() # 抛出HTTP错误
res_data = response.json()
if res_data["code"] == 200:
# 登录成功,解析用户信息
user_info = res_data["data"]
print(f"登录成功!用户昵称:{user_info['nickname']}")
print(f"用户等级:{user_info['grade']},经验值:{user_info['exp']}")
# 转换令牌失效时间(时间戳→本地时间)
dead_time = datetime.fromtimestamp(user_info["token_dead(令牌失效时间)"]).strftime("%Y-%m-%d %H:%M:%S")
print(f"令牌失效时间:{dead_time}")
# 存储令牌(示例:存本地变量)
user_token = user_info["token (用户令牌)"]
else:
print(f"登录失败:{res_data['data']}")
except requests.exceptions.RequestException as e:
print(f"请求异常:{str(e)}")python
import requests
from datetime import datetime
# 1. 配置参数(同GET,signature从后台获取)
appid = "your_app_id"
signature = "your_signature_from_backend" # 后台获取的签名
user = "user123456"
passwd = "user_password123" # 密码无需加密,直接传递
# 2. 构造POST参数
params = {
"appid": appid,
"signature": signature,
"user": user,
"pass": passwd
}
# 3. 发起POST请求
url = "https://nobase.cn/api/user/login"
try:
response = requests.post(url, data=params, timeout=5)
response.raise_for_status()
res_data = response.json()
if res_data["code"] == 200:
# 登录成功,解析用户信息
user_info = res_data["data"]
print(f"登录成功!本次登录时间:{user_info['logintime']}")
print(f"VIP状态:{user_info['viptime']},连续登录天数:{user_info['Continuouslogin(连续登录)']}")
print(f"用户性别:{'男' if user_info['sex(性别1是男2是女)'] == 1 else '女'}")
else:
print(f"登录失败:{res_data['data']}")
except requests.exceptions.RequestException as e:
print(f"请求异常:{str(e)}")注意事项
- 密码传递规则:
pass参数直接传递用户原始密码,无需进行MD5或其他加密处理,避免因加密导致与后台存储的密码不匹配,进而登录失败。 - 签名使用规范:
signature需从后台直接获取,与appid绑定,无需手动生成;若返回“签名错误”,需核对后台签名是否与传递的值一致,且无多余空格或字符。 - 令牌存储与校验:登录成功后返回的
token (用户令牌)需妥善存储(如前端存localStorage、后端存数据库),后续需权限的接口需携带此令牌;同时需关注token_dead(令牌失效时间),过期前需重新登录获取新令牌。 - 业务失败场景:常见失败原因包括“账号密码错误”“应用ID无效”“签名不匹配”,需根据
data字段提示,在前端展示对应友好提示(如“账号或密码错误,请重新输入”)。 - 安全提示:因密码采用明文传递,建议在生产环境中确保接口使用HTTPS协议,防止密码在传输过程中被窃取,降低安全风险。

