mi-gpt 小米账号异地登录验证问题完全解决指南

📅 问题解决日期

2026年3月8日

🎯 问题描述

运行 node app.js 时出现以下错误:

🔥 触发小米账号异地登录安全验证机制,请在浏览器打开以下链接,并按照网页提示授权验证账号:
👉 https://account.xiaomi.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx?sid=micoapi&...
❌ 小米账号登录失败

尝试过的无效方法:

  • ✗ 在浏览器中完成验证 - 仍然报错
  • ✗ 等待1小时后重试 - 无效
  • ✗ 关闭代理后重试 - 无效
  • ✗ 等待24小时后重试 - 无效

🔍 根本原因分析

通过深入研究 mi-service-lite 源码发现:

  1. mi-service-lite 的实现限制:即使提供 .mi.json 文件中的 passToken,代码仍然会检查 password 字段并尝试完整登录流程
  2. 验证状态同步问题:浏览器验证与服务器登录请求的状态不同步
  3. 安全验证机制:小米服务端检测到异地登录,即使完成验证也需要时间更新状态

✅ 最终解决方案

1. 获取 passToken

步骤:

  1. 在电脑上使用 Chrome 浏览器打开:https://account.xiaomi.com
  2. 使用小米账号登录(userId: 3156264602)
  3. 按 F12 打开开发者工具
  4. 切换到 Network(网络)标签
  5. 刷新页面,找到包含 passToken 的请求
  6. 在 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

📚 关键要点

成功因素

  1. 正确的 .mi.json 格式:必须包含 mina 和 miiot 两个服务的配置
  2. 有效的 passToken:从浏览器正确获取且未退出登录
  3. 环境变量配置:使用 npm run dev 确保环境变量被加载
  4. 耐心等待:验证状态更新需要时间(1-24小时)

注意事项

  • ⚠️ passToken 会过期,需要定期更新(约14天)
  • ⚠️ 获取 passToken 的浏览器不要退出登录
  • ⚠️ 服务配置文件位置:~/Library/LaunchAgents/com.mi-gpt.plist
  • ⚠️ 日志文件位置:/Users/tianqinghong/mi-gpt/logs/

🛠️ 故障排除

问题1:仍然提示异地登录验证

解决方案:

  1. 确认 .mi.json 格式正确
  2. 确认 passToken 有效且浏览器未退出
  3. 等待 2-4 小时后重试
  4. 检查网络环境是否一致

问题2:API 密钥错误

解决方案:

  1. 确认 .env 文件配置正确
  2. 使用 npm run dev 而不是 npm start
  3. 检查环境变量是否被正确加载

问题3:服务无法启动

解决方案:

  1. 检查 launchd 服务状态:launchctl list | grep mi-gpt
  2. 查看错误日志:tail -f logs/mi-gpt-error.log
  3. 重新加载服务:launchctl unload/load ~/Library/LaunchAgents/com.mi-gpt.plist

📖 参考资料

🎊 最终效果

现在的小爱音箱:

  • ✅ 开机自动启动 mi-gpt 服务
  • ✅ 接入智谱 GLM-4.7 大模型
  • ✅ 支持流式响应
  • ✅ 具备长期记忆能力
  • ✅ 可自定义角色设定

享受你的智能语音助手吧!