[优化] LittleSkin 等第三方登录接口登录失败时使用服务器返回的 Json 对象中的 errorMessage 项的解码结果作为解决办法替代原有解决办法
检查项
- [X] 我已在 Issues 页面 和 常见&难检反馈及问题列表 中搜索,确认了这一建议未被提交过。
- [X] 我已查看 功能投票页面,确认了这一建议未在投票列表中。
描述
这是登录失败时 LittleSkin 服务器返回的 Json
其中 errorMessage 项的解码结果是 输入的邮箱与密码不匹配
{"error":"ForbiddenOperationException","errorMessage":"\u8f93\u5165\u7684\u90ae\u7bb1\u4e0e\u5bc6\u7801\u4e0d\u5339\u914d"}
原因
遇到问题时不需要额外检查其他项目,节约了遇到问题时检查其他项目的时间和 Collaborator 的时间,避免出现因为各类可以自行解决问题没有详细信息而产生的无效 Issue
首先,我们很有时间…… 其次,并不是每个网站都会返回这种信息吧?
首先,我们很有时间…… 其次,并不是每个网站都会返回这种信息吧?
每个网站都有
umm 至少我不知道哪有关于这个报错信息规范或者 API 文档,如果有的话可以做……
https://github.com/yushijinhun/authlib-injector/wiki/Yggdrasil-%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%8A%80%E6%9C%AF%E8%A7%84%E8%8C%83#:~:text=%22errorMessage%22%3A%22%E9%94%99%E8%AF%AF%E7%9A%84%E8%AF%A6%E7%BB%86%E4%BF%A1%E6%81%AF%EF%BC%88%E4%BA%BA%E7%B1%BB%E5%8F%AF%E8%AF%BB%EF%BC%89%22%2C
这是服务端规范
| 序号 | 描述 | HTTP 状态码 | 错误 | 错误信息 |
|---|---|---|---|---|
| 1 | 试图使用一个错误的角色加入服务器 | 403 | ForbiddenOperationException | Invalid token |
| 2 | 密码错误,或短时间内多次登录失败而被暂时禁止登录 | 403 | ForbiddenOperationException | Invalid credentials. Invalid username or password |
| 3 | 试图向一个已经绑定了角色的令牌指定其要绑定的角色 | 400 | IllegalArgumentException | Access token already has a profile assigned |
| 4 | 试图向一个令牌绑定不属于其对应用户的角色 (非标准) | 403 | ForbiddenOperationException | 未定义 |
| 5 | 试图使用一个错误的角色加入服务器 | 403 | ForbiddenOperationException | Invalid token |
5 不是启动器问题,可以跳过,4要做空值和HTTP状态码判断
我认为不用判断,直接打印返回的 errorMessage 即可
4没有定义错误信息,如果这是启动器负责的错误,并且外置登录提供方没有定义错误信息,那么需要通过判断状态码和空值来判断
我认为不用判断,直接打印返回的 errorMessage 即可
你太相信玩家们的英语水平了
我认为不用判断,直接打印返回的 errorMessage 即可
你太相信玩家们的英语水平了
errorMessage 可以是中文的
例如楼主发的 json 内容
我认为不用判断,直接打印返回的 errorMessage 即可
你太相信玩家们的英语水平了
据我所知都是中文的
可以在发送的请求中添加 Accept-Language 头。
Blessing Skin 的 Yggdrasil API 插件会通过 Accept-Language 头的值以及存储于数据库中的用户偏好语言,返回对应语言的 errorMessage。如果 Blessing Skin 不支持 Accept-Language 头中包含的所有语言且用户不存在,则返回皮肤站管理员设置的回落语言(.env 文件中的 APP_FALLBACK_LOCALE 设置项)。对于 LittleSkin,回落语言是简体中文(zh_CN)。
优先级:Accept-Language 头的值包含的语言 > 数据库中记录的用户偏好语言 > 回落语言
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Accept-Language
@allMagicNB
首先,我们很有时间…… 其次,并不是每个网站都会返回这种信息吧?
你们很有时间,但是用户以及皮肤站管理员不一定。
你自己也在 LittleSkin 的用户交流群里,应该也看到过我们处理 PCL 无法登录 LittleSkin 账号的问题的时候有多烦。
@ allMagicNB
首先,我们很有时间…… 其次,并不是每个网站都会返回这种信息吧?
你们很有时间,但是用户以及皮肤站管理员不一定。
你自己也在 LittleSkin 的用户交流群里,应该也看到过我们处理 PCL 无法登录 LittleSkin 账号的问题的时候有多烦。
没事别理他,这家伙语气有点非常冲 😂 这不代表我们的观点
首先,我们很有时间…… 其次,并不是每个网站都会返回这种信息吧?
你们很有时间,但是用户以及皮肤站管理员不一定。
主要来说这是对 Author 提供的原因的回答,然后 Author 没有提到皮肤站管理员和用户……那时候脑子缺根筋也没联想到
你自己也在 LittleSkin 的用户交流群里,应该也看到过我们处理 PCL 无法登录 LittleSkin 账号的问题的时候有多烦。
看得出来对这个功能确实很需要,但是开发者对制作它的优先度却是最低级的。
一个情况: 有位PCL玩家在某个皮肤站反馈群(或者自建服务器群)发出了外置登录失败的截图 我们其实也并不知道他究竟是哪里发生了失误 用户也浪费时间在那三个可能性上
最后我们提出让他用HMCL...来检查哪里发生了问题 因为HMCL支持提供登录失败的原因
至少每个月来一次这样的情况 处理一个本来可以通过详细原因让用户**自主**知道究竟在哪里出的错的问题真的很让人头痛
@allMagicNB
主要来说这是对 Author 提供的原因的回答,然后 Author 没有提到皮肤站管理员和用户……那时候也没联想到
即使是面对源头开发者,也不应该给一个模棱两可的答案,让开发者猜谜语,或者花费额外的时间和沟通成本来排查原因。这么做和丢下一句「启动器出问题了」而不给任何可用信息没有显著差别。
时间就是时间,不是什么可再生资源。不能因为「很有时间」就把时间花费在没有意义的排障流程上,特别是在这个流程所耗费的时间可以显著缩短的情况下。
这绝非优雅的用户体验。
@allMagicNB
主要来说这是对 Author 提供的原因的回答,然后 Author 没有提到皮肤站管理员和用户……那时候也没联想到
即使是面对源头开发者,也不应该给一个模棱两可的答案,让开发者猜谜语,或者花费额外的时间和沟通成本来排查原因。这么做和丢下一句「启动器出问题了」而不给任何可用信息没有显著差别。
时间就是时间,不是什么可再生资源。不能因为「很有时间」就把时间花费在没有意义的排障流程上,特别是在这个流程所耗费的时间可以显著缩短的情况下。
这绝非优雅的用户体验。
这跟我上文所说的情况: “处理一个本来可以通过详细原因让用户自主知道究竟在哪里出的错的问题真的很让人头痛” 就是一种不优雅(很糟糕)的使用体验
不是,这咋扯远了?不就一行 responseJson.TryGetValue("errorMessage") ?? "null" 就行了?获取到了就显示给用户,获取不到就显示无解决方案
显示不显示归一码,用户能不能看懂归一码,起码显示了不是
大致做了一下,有谁去看看有没有漏了什么?