Yonsm / MiService

XiaoMi Cloud Service for mi.com
MIT License
652 stars 195 forks source link

KeyError: 'userId'/Error https://api.io.mi.com/app/home/device_list: Login failed #26

Open Ya-chunJen opened 1 year ago

Ya-chunJen commented 1 year ago

运行 ./micli.py list 后,出现下面的错误: Exception on login 187****: 'userId' Traceback (most recent call last): File "/Users/renyajun/gitee/MiBot/miservice/miaccount.py", line 71, in login self.token['userId'] = resp['userId'] KeyError: 'userId' Error https://api.io.mi.com/app/home/device_list: Login failed

该怎么解决呢?之前看到有人通过取消代理解决,但是我这边操作后还是不行。

Deanwfy commented 1 year ago

我也遇到了同样的问题

miaccount.py中: 56行_serviceLogin(f"serviceLogin?sid={sid}&_json=true")返回“登陆验证失败”, 走到67行_serviceLogin("serviceLoginAuth2", data),这里返回了一个没有数据的code=0(如下),之后就报错了。

{
    'notificationUrl': '/identity/authStart?sid=xiaomiio&context=xxxxxx&_locale=zh_CN',
    'result': 'ok',
    'code': 0,
    'captchaUrl': None,
    'description': '成功',
    'location': '',
    'securityStatus': 16,
    'pwd': 0,
    'child': 0,
    'desc': '成功'
}

环境:国内腾讯云、CentOS7、Python3.9

关联issue:

12

20

Ya-chunJen commented 1 year ago

我的这个问题解决了,修改了一下小米账号的密码,之前有特殊字符,修改为只包含字符和数字就可以了。

jjiikkkk commented 1 year ago

有字母的也不认吗

jjiikkkk commented 1 year ago

密码里有字母

jjiikkkk commented 1 year ago

这是一个显然存在很大BUG的问题,需要作者纠正啊

nongwoluanlai commented 6 months ago

解决方法: image

拿到类似这样的输出 {'notificationUrl': '/identity/authStart?sid=xiaomiio&context=wDILiZe6yVI_DvJbvAz_F4_8LXyuoTar-odx0H0FyIvaYXRxxxxx9BUuGPfyyRhogXWOwxxxxxxZNajJd0mnxxxxxx1ZptsXnXBxxxxxxfSmV_mQnew3i-tofXCVQ_P80fJ4xxf20Bl-t95zHZeqYeuDxxrGYxT2mxxOkQZQSxxAJTYjy-sg6WpVkH8AaGexxxxxxxNMXrvjWjWCfTfY9ipdTMWa0_UgmbFSUJmOX-Exxxxs5b_C4IBXHkIR1sk-EAC3ZDeawj_o5Zg&_locale=zh_CN', 'result': 'ok', 'code': 0, 'captchaUrl': None, 'description': '成功', 'location': '', 'securityStatus': 16, 'pwd': 0, 'child': 0, 'desc': '成功'} 复制notificationUrl拼接上https://account.xiaomi.com/pass/serviceLoginAuth2 得到: https://account.xiaomi.com/pass/serviceLoginAuth2/identity/authStart?sid=xiaomiio&context=xxxxxx 这样的链接,复制到你的浏览器上打开即可手机短信等验证,验证通过后再次使用即可正常

firstuanl commented 5 months ago

解决方法: image

拿到类似这样的输出 {'notificationUrl': '/identity/authStart?sid=xiaomiio&context=wDILiZe6yVI_DvJbvAz_F4_8LXyuoTar-odx0H0FyIvaYXRxxxxx9BUuGPfyyRhogXWOwxxxxxxZNajJd0mnxxxxxx1ZptsXnXBxxxxxxfSmV_mQnew3i-tofXCVQ_P80fJ4xxf20Bl-t95zHZeqYeuDxxrGYxT2mxxOkQZQSxxAJTYjy-sg6WpVkH8AaGexxxxxxxNMXrvjWjWCfTfY9ipdTMWa0_UgmbFSUJmOX-Exxxxs5b_C4IBXHkIR1sk-EAC3ZDeawj_o5Zg&_locale=zh_CN', 'result': 'ok', 'code': 0, 'captchaUrl': None, 'description': '成功', 'location': '', 'securityStatus': 16, 'pwd': 0, 'child': 0, 'desc': '成功'} 复制notificationUrl拼接上https://account.xiaomi.com/pass/serviceLoginAuth2 得到: https://account.xiaomi.com/pass/serviceLoginAuth2/identity/authStart?sid=xiaomiio&context=xxxxxx 这样的链接,复制到你的浏览器上打开即可手机短信等验证,验证通过后再次使用即可正常

改了还是错误怎办。

mxx894 commented 5 months ago

解决方法: image

拿到类似这样的输出 {'notificationUrl': '/identity/authStart?sid=xiaomiio&context=wDILiZe6yVI_DvJbvAz_F4_8LXyuoTar-odx0H0FyIvaYXRxxxxx9BUuGPfyyRhogXWOwxxxxxxZNajJd0mnxxxxxx1ZptsXnXBxxxxxxfSmV_mQnew3i-tofXCVQ_P80fJ4xxf20Bl-t95zHZeqYeuDxxrGYxT2mxxOkQZQSxxAJTYjy-sg6WpVkH8AaGexxxxxxxNMXrvjWjWCfTfY9ipdTMWa0_UgmbFSUJmOX-Exxxxs5b_C4IBXHkIR1sk-EAC3ZDeawj_o5Zg&_locale=zh_CN', 'result': 'ok', 'code': 0, 'captchaUrl': None, 'description': '成功', 'location': '', 'securityStatus': 16, 'pwd': 0, 'child': 0, 'desc': '成功'} 复制notificationUrl拼接上https://account.xiaomi.com/pass/serviceLoginAuth2 得到: https://account.xiaomi.com/pass/serviceLoginAuth2/identity/authStart?sid=xiaomiio&context=xxxxxx 这样的链接,复制到你的浏览器上打开即可手机短信等验证,验证通过后再次使用即可正常

感谢 得到了 /fe/service/verifyPhone... 这样的resp,拼接上 https://account.xiaomi.com/fe/service/verifyPhone... 浏览器打开即可

f1ynng8 commented 1 month ago

直接登录https://account.xiaomi.com,会提示确认手机号码是否在用