mi-gpt 小米账号异地登录验证问题完全解决指南
📅 问题解决日期
2026年3月8日
🎯 问题描述
运行 node app.js 时出现以下错误:
🔥 触发小米账号异地登录安全验证机制,请在浏览器打开以下链接,并按照网页提示授权验证账号:
👉 https://account.xiaomi.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?sid=micoapi&...
❌ 小米账号登录失败
尝试过的无效方法:
- ✗ 在浏览器中完成验证 - 仍然报错
- ✗ 等待1小时后重试 - 无效
- ✗ 关闭代理后重试 - 无效
- ✗ 等待24小时后重试 - 无效
🔍 根本原因分析
通过深入研究 mi-service-lite 源码发现:
- mi-service-lite 的实现限制:即使提供
.mi.json文件中的 passToken,代码仍然会检查 password 字段并尝试完整登录流程 - 验证状态同步问题:浏览器验证与服务器登录请求的状态不同步
- 安全验证机制:小米服务端检测到异地登录,即使完成验证也需要时间更新状态
✅ 最终解决方案
1. 获取 passToken
步骤:
- 在电脑上使用 Chrome 浏览器打开:https://account.xiaomi.com
- 使用小米账号登录(userId: 3156264602)
- 按 F12 打开开发者工具
- 切换到 Network(网络)标签
- 刷新页面,找到包含 passToken 的请求
- 在 Response 或 Headers 中找到 passToken 值
重要提示:
- ⚠️ passToken 相当于账号密码,绝对不要泄漏给任何人
- ⚠️ 获取 passToken 后,不要在该浏览器中退出小米账号,否则会导致 token 失效
2. 创建 .mi.json 文件
在项目根目录创建 .mi.json 文件,格式如下:
{
"mina": {
"userId": "3156264602",
"passToken": "你的passToken值"
},
"miiot": {
"userId": "3156264602",
"passToken": "你的passToken值"
}
}
关键点:
- ✅ 文件必须按服务名组织(
mina和miiot) - ✅ 两个服务使用相同的 passToken
- ✅ userId 必须正确
3. 配置环境变量
在 .env 文件中配置智谱AI:
# OpenAI/智谱 AI 配置
OPENAI_MODEL=glm-4.7
OPENAI_API_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.Ss7mK5hNbUjSAZPg
OPENAI_BASE_URL=https://open.bigmodel.cn/api/paas/v4
4. 启动服务
使用正确的启动命令加载环境变量:
npm run dev
🎉 成功验证
服务成功启动的标志:
2026/03/08 18:32:06 Speaker ✅ 服务已启动...
测试对话:
- 用户:“小爱同学,请你介绍一下你自己”
- AI回应:“主人,你忘了吗?我是傻妞呀!一个拥有超级智慧、长得又乖巧可爱的小仙女…”
⚙️ 开机自启动配置
macOS launchd 配置
创建 ~/Library/LaunchAgents/com.mi-gpt.plist:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.mi-gpt</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/bin/node</string>
<string>--env-file</string>
<string>/Users/tianqinghong/mi-gpt/.env</string>
<string>/Users/tianqinghong/mi-gpt/app.js</string>
</array>
<key>WorkingDirectory</key>
<string>/Users/tianqinghong/mi-gpt</string>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/Users/tianqinghong/mi-gpt/logs/mi-gpt.log</string>
<key>StandardErrorPath</key>
<string>/Users/tianqinghong/mi-gpt/logs/mi-gpt-error.log</string>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin</string>
</dict>
<key>ProcessType</key>
<string>Interactive</string>
</dict>
</plist>
服务管理命令
# 查看服务状态
launchctl list | grep mi-gpt
# 停止服务
launchctl stop com.mi-gpt
# 启动服务
launchctl start com.mi-gpt
# 重启服务
launchctl kickstart -k gui/$(id -u)/com.mi-gpt
# 查看实时日志
tail -f /Users/tianqinghong/mi-gpt/logs/mi-gpt.log
# 查看错误日志
tail -f /Users/tianqinghong/mi-gpt/logs/mi-gpt-error.log
📚 关键要点
成功因素
- 正确的 .mi.json 格式:必须包含 mina 和 miiot 两个服务的配置
- 有效的 passToken:从浏览器正确获取且未退出登录
- 环境变量配置:使用
npm run dev确保环境变量被加载 - 耐心等待:验证状态更新需要时间(1-24小时)
注意事项
- ⚠️ passToken 会过期,需要定期更新(约14天)
- ⚠️ 获取 passToken 的浏览器不要退出登录
- ⚠️ 服务配置文件位置:~/Library/LaunchAgents/com.mi-gpt.plist
- ⚠️ 日志文件位置:/Users/tianqinghong/mi-gpt/logs/
🛠️ 故障排除
问题1:仍然提示异地登录验证
解决方案:
- 确认 .mi.json 格式正确
- 确认 passToken 有效且浏览器未退出
- 等待 2-4 小时后重试
- 检查网络环境是否一致
问题2:API 密钥错误
解决方案:
- 确认 .env 文件配置正确
- 使用
npm run dev而不是npm start - 检查环境变量是否被正确加载
问题3:服务无法启动
解决方案:
- 检查 launchd 服务状态:
launchctl list | grep mi-gpt - 查看错误日志:
tail -f logs/mi-gpt-error.log - 重新加载服务:
launchctl unload/load ~/Library/LaunchAgents/com.mi-gpt.plist
📖 参考资料
🎊 最终效果
现在的小爱音箱:
- ✅ 开机自动启动 mi-gpt 服务
- ✅ 接入智谱 GLM-4.7 大模型
- ✅ 支持流式响应
- ✅ 具备长期记忆能力
- ✅ 可自定义角色设定
享受你的智能语音助手吧!