用户登录接口,支持多种登录方式,包括网站登录、微信登录、Google登录等,用于验证用户身份并返回登录凭证。
注意事项
- 该接口采用POST方法,需要以application/json格式提交数据
- 支持多种平台登录,包括网站、微信、QQ、Google等
- 网站登录需要用户名和密码
- 微信登录需要提供相应用户信息和凭证
- Google登录需要通过OAuth流程获取code
- 登录成功后返回用户信息和登录token
- 支持记住登录状态功能
请求地址
{域名地址}/api/login
说明:{域名地址} 需要替换成你的域名地址,如 https://www.anqicms.com/api/login
请求语法
POST {域名地址}/api/login
Content-Type: application/json
请求参数
| 字段名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| platform | string | 是 | 登录方式,默认值为 website,可选值有:tt、swan、alipay、qq、weapp、wechat、inwechat、google、website |
| code | string | 否 | 微信、Google的临时凭证,或者是验证码 |
| anonymousCode | string | 否 | 微信用户信息,platform=wechat/weapp 有效 |
| avatar | string | 否 | 微信用户信息,platform=wechat/weapp 有效 |
| nick_name | string | 否 | 微信用户信息,platform=wechat/weapp 有效 |
| gender | string | 否 | 微信用户信息,platform=wechat/weapp 有效 |
| province | string | 否 | 微信用户信息,platform=wechat/weapp 有效 |
| city | string | 否 | 微信用户信息,platform=wechat/weapp 有效 |
| county | string | 否 | 微信用户信息,platform=wechat/weapp 有效 |
| encryptedData | string | 否 | 微信用户信息,platform=wechat/weapp 有效 |
| iv | string | 否 | 微信用户信息,platform=wechat/weapp 有效 |
| signature | string | 否 | 微信用户信息,platform=wechat/weapp 有效 |
| rawData | string | 否 | 微信用户信息,platform=wechat/weapp 有效 |
| remember | boolean | 否 | 是否记住用户,platform=website 有效 |
| user_name | string | 否 | 用户名,platform=website 有效 |
| password | string | 否 | 密码,platform=website 有效 |
| captcha_id | string | 否 | 图形验证码 ID,platform=website 有效 |
| captcha | string | 否 | 图形验证码值,platform=website 有效 |
返回参数
| 字段名 | 类型 | 说明 |
|---|---|---|
| code | int | 错误码 |
| msg | string | 错误原因说明 |
| data | object | 结果内容 |
data 参数
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 用户 ID |
| parent_id | int | 上级用户 ID |
| user_name | string | 用户名 |
| real_name | string | 真实姓名 |
| avatar_url | string | 用户头像地址 |
| string | email 地址 | |
| phone | string | 手机号 |
| group_id | int | 用户组 ID |
| is_retailer | int | 是否是分销员 |
| balance | int | 用户余额 |
| total_reward | int | 分销员累计收益 |
| invite_code | string | 用户邀请码 |
| last_login | int | 最近一次登录时间 |
| expire_time | int | 过期时间 |
| created_time | int | 注册时间戳 |
| updated_time | int | 更新时间戳 |
| status | int | 显示状态 |
| token | string | 登录凭证 |
使用示例
网站登录请求示例
POST /api/login HTTP/1.1
Host: www.anqicms.com
Content-Type: application/json
{
"platform": "website",
"user_name": "admin",
"password": "123456",
"remember": false
}
微信登录请求示例
POST /api/login HTTP/1.1
Host: www.anqicms.com
Content-Type: application/json
{
"platform": "wechat",
"code": "wechat_code",
"avatar": "https://example.com/avatar.jpg",
"nick_name": "微信用户",
"gender": "1",
"province": "广东",
"city": "深圳",
"county": "南山区",
"encryptedData": "encrypted_data",
"iv": "iv_value",
"signature": "signature_value",
"rawData": "raw_data"
}
Google登录请求示例
POST /api/login HTTP/1.1
Host: www.anqicms.com
Content-Type: application/json
{
"platform": "google",
"state": "your-generated-state-value",
"code": "google-auth-code"
}
Google登录完整流程
- 首先获取谷歌登录跳转URL:
GET /api/google/url?state=your-state-value HTTP/1.1
Host: www.anqicms.com
跳转到返回的谷歌授权URL,用户完成授权后会被重定向到回调地址
在回调页面获取授权code,调用登录接口:
POST /api/login HTTP/1.1
Host: www.anqicms.com
Content-Type: application/json
{
"platform": "google",
"state": "your-state-value",
"code": "authorization-code-from-google"
}
前端Google登录实现示例
// 点击谷歌登录按钮时触发
$('#login-google-btn').click(function() {
$.get("/api/google/url").then(res => {
if (res.data) {
// 保存state值,用于后续验证
sessionStorage.setItem('state', res.data.state);
// 跳转到谷歌授权页面
window.location.href = res.data.url;
}
}, 'json');
});
// 检查URL中是否有code参数(授权回调时)
if (window.location.href.indexOf('code') > -1) {
// 获取URL参数中的code和state
var urlParams = new URLSearchParams(window.location.search);
var code = urlParams.get('code');
var state = urlParams.get('state');
// 调用登录接口完成登录
$.ajax({
type: 'POST',
url: '/api/login',
data: JSON.stringify({
platform: "google",
"state": state,
"code": code,
}),
contentType: "application/json",
dataType: 'json',
success: function (res) {
if (res.code === 0) {
console.log('Google登录成功', res);
// 登录成功后的处理
window.location.href = '/dashboard'; // 跳转到用户中心
} else {
console.error('Google登录失败', res.msg);
}
},
error: function(xhr, status, error) {
console.error('网络错误', error);
}
});
}
响应示例
{
"code": 0,
"data": {
"id": 1000,
"created_time": 1669012062,
"updated_time": 1679536756,
"parent_id": 0,
"user_name": "admin",
"real_name": "",
"avatar_url": "uploads/202211/21/14f56760596b5328.webp",
"email": "",
"phone": "",
"group_id": 2,
"status": 1,
"is_retailer": 0,
"balance": 0,
"total_reward": 0,
"invite_code": "anqicms",
"last_login": 1702912236,
"expire_time": 1997404800,
"extra": null,
"token": "eyJhbGI1NiZXJJZUwNnVCI6IjEwMDAifQ.pLmYPvSajEWrF0FaUGDciOiJIUzIzNiIsILLZBCRm8fYewv49agxlTA26DwIsInR5cCI6IkpXVCJ9.eyJ0IjoiMTcwNTz",
"group": null,
"full_avatar_url": "",
"link": ""
},
"msg": ""
}
错误响应示例
{
"code": -1,
"msg": "用户名或密码错误"
}
错误代码
| 错误码 | 说明 |
|---|---|
| 0 | OK |
| -1 | 错误,错误原因在 msg 中指出 |
| 1001 | 未登录 |
| 1002 | 未授权 |
| 200 | API 请求 OK |