PCL2 icon indicating copy to clipboard operation
PCL2 copied to clipboard

[优化] LittleSkin 等第三方登录接口登录失败时使用服务器返回的 Json 对象中的 errorMessage 项的解码结果作为解决办法替代原有解决办法

Open wuliaodexiaoluo opened this issue 1 year ago • 19 comments

检查项

描述

这是登录失败时 LittleSkin 服务器返回的 Json 其中 errorMessage 项的解码结果是 输入的邮箱与密码不匹配 {"error":"ForbiddenOperationException","errorMessage":"\u8f93\u5165\u7684\u90ae\u7bb1\u4e0e\u5bc6\u7801\u4e0d\u5339\u914d"} image

原因

遇到问题时不需要额外检查其他项目,节约了遇到问题时检查其他项目的时间和 Collaborator 的时间,避免出现因为各类可以自行解决问题没有详细信息而产生的无效 Issue

wuliaodexiaoluo avatar Mar 15 '24 04:03 wuliaodexiaoluo

首先,我们很有时间…… 其次,并不是每个网站都会返回这种信息吧?

allMagicNB avatar Mar 15 '24 04:03 allMagicNB

首先,我们很有时间…… 其次,并不是每个网站都会返回这种信息吧?

每个网站都有

wuliaodexiaoluo avatar Mar 15 '24 05:03 wuliaodexiaoluo

umm 至少我不知道哪有关于这个报错信息规范或者 API 文档,如果有的话可以做……

LTCatt avatar Mar 15 '24 07:03 LTCatt

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

这是服务端规范

zkitefly avatar Mar 15 '24 08:03 zkitefly

序号 描述 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状态码判断

wuliaodexiaoluo avatar Mar 15 '24 09:03 wuliaodexiaoluo

我认为不用判断,直接打印返回的 errorMessage 即可

zkitefly avatar Mar 15 '24 09:03 zkitefly

4没有定义错误信息,如果这是启动器负责的错误,并且外置登录提供方没有定义错误信息,那么需要通过判断状态码和空值来判断

ghost avatar Mar 15 '24 10:03 ghost

我认为不用判断,直接打印返回的 errorMessage 即可

你太相信玩家们的英语水平了

Deep-Dark-Forest avatar Mar 15 '24 11:03 Deep-Dark-Forest

我认为不用判断,直接打印返回的 errorMessage 即可

你太相信玩家们的英语水平了

errorMessage 可以是中文的

例如楼主发的 json 内容

zkitefly avatar Mar 15 '24 11:03 zkitefly

我认为不用判断,直接打印返回的 errorMessage 即可

你太相信玩家们的英语水平了

据我所知都是中文的

ghost avatar Mar 15 '24 11:03 ghost

可以在发送的请求中添加 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

tnqzh123 avatar Aug 14 '24 12:08 tnqzh123

@allMagicNB

首先,我们很有时间…… 其次,并不是每个网站都会返回这种信息吧?

你们很有时间,但是用户以及皮肤站管理员不一定。

你自己也在 LittleSkin 的用户交流群里,应该也看到过我们处理 PCL 无法登录 LittleSkin 账号的问题的时候有多烦。

tnqzh123 avatar Aug 14 '24 12:08 tnqzh123

@ allMagicNB

首先,我们很有时间…… 其次,并不是每个网站都会返回这种信息吧?

你们很有时间,但是用户以及皮肤站管理员不一定。

你自己也在 LittleSkin 的用户交流群里,应该也看到过我们处理 PCL 无法登录 LittleSkin 账号的问题的时候有多烦。

没事别理他,这家伙语气有点非常冲 😂 这不代表我们的观点

MoYuan-CN avatar Aug 14 '24 12:08 MoYuan-CN

首先,我们很有时间…… 其次,并不是每个网站都会返回这种信息吧?

你们很有时间,但是用户以及皮肤站管理员不一定。

主要来说这是对 Author 提供的原因的回答,然后 Author 没有提到皮肤站管理员和用户……那时候脑子缺根筋也没联想到

你自己也在 LittleSkin 的用户交流群里,应该也看到过我们处理 PCL 无法登录 LittleSkin 账号的问题的时候有多烦。

看得出来对这个功能确实很需要,但是开发者对制作它的优先度却是最低级的。

allMagicNB avatar Aug 14 '24 12:08 allMagicNB

一个情况: 有位PCL玩家在某个皮肤站反馈群(或者自建服务器群)发出了外置登录失败的截图 我们其实也并不知道他究竟是哪里发生了失误 用户也浪费时间在那三个可能性上

最后我们提出让他用HMCL...来检查哪里发生了问题 因为HMCL支持提供登录失败的原因

至少每个月来一次这样的情况 处理一个本来可以通过详细原因让用户**自主**知道究竟在哪里出的错的问题真的很让人头痛

LeiSureLyYrsc avatar Aug 14 '24 13:08 LeiSureLyYrsc

@allMagicNB

主要来说这是对 Author 提供的原因的回答,然后 Author 没有提到皮肤站管理员和用户……那时候也没联想到

即使是面对源头开发者,也不应该给一个模棱两可的答案,让开发者猜谜语,或者花费额外的时间和沟通成本来排查原因。这么做和丢下一句「启动器出问题了」而不给任何可用信息没有显著差别。

时间就是时间,不是什么可再生资源。不能因为「很有时间」就把时间花费在没有意义的排障流程上,特别是在这个流程所耗费的时间可以显著缩短的情况下。

这绝非优雅的用户体验。

tnqzh123 avatar Aug 14 '24 13:08 tnqzh123

@allMagicNB

主要来说这是对 Author 提供的原因的回答,然后 Author 没有提到皮肤站管理员和用户……那时候也没联想到

即使是面对源头开发者,也不应该给一个模棱两可的答案,让开发者猜谜语,或者花费额外的时间和沟通成本来排查原因。这么做和丢下一句「启动器出问题了」而不给任何可用信息没有显著差别。

时间就是时间,不是什么可再生资源。不能因为「很有时间」就把时间花费在没有意义的排障流程上,特别是在这个流程所耗费的时间可以显著缩短的情况下。

这绝非优雅的用户体验。

这跟我上文所说的情况: “处理一个本来可以通过详细原因让用户自主知道究竟在哪里出的错的问题真的很让人头痛” 就是一种不优雅(很糟糕)的使用体验

LeiSureLyYrsc avatar Aug 14 '24 13:08 LeiSureLyYrsc

不是,这咋扯远了?不就一行 responseJson.TryGetValue("errorMessage") ?? "null" 就行了?获取到了就显示给用户,获取不到就显示无解决方案

显示不显示归一码,用户能不能看懂归一码,起码显示了不是

SALTWOOD avatar Aug 14 '24 14:08 SALTWOOD

大致做了一下,有谁去看看有没有漏了什么?

MoYuan-CN avatar Aug 14 '24 14:08 MoYuan-CN