Telegram 登录响应“NOT_AUTHORIZED”

Nei*_*kos 0 telegram

我正在尝试使用 Telegram 登录小部件。

我已在登录页面中插入以下脚本:

<script async="" src="https://telegram.org/js/telegram-widget.js?4" data-telegram-login="<name of bot>" data-size="large" data-auth-url="http://local.<domain>/tg" data-radius="0" data-request-access="write"></script>
Run Code Online (Sandbox Code Playgroud)

只要显示登录小部件,此操作就有效。

当我单击“使用 Telegram 登录”按钮时,如果我想登录该网站,它会正确地要求我接受/拒绝。但随后就没有再发生任何事情。

通过调查网络请求,我发现电报服务器响应如下:

{"error":"NOT_AUTHORIZED","html":"<button class=\"btn tgme_widget_login_button\" onclick=\"return TWidgetLogin.auth();\"><i class=\"tgme_widget_login_button_icon\"><\/i>Log in with Telegram<\/button>","origin":"http:\/\/local.<domain>"}
Run Code Online (Sandbox Code Playgroud)

有什么是我应该做的而错过的吗?

我确实与 @BotFather 进行了交谈,将域名设置为http://local.<domain>.

登录时,我还在客户端中收到来自 Telegram 的消息,告诉我:

您已通过@成功登录local.furry.cafe。该网站收到您的姓名、用户名和个人资料图片。

可能有问题的事情:

  • local.<domain>是我的 /etc/hosts 的一部分,但这应该不是问题,对吧?
  • 我的开发机器上没有使用 HTTPS?但这并没有在任何地方写成要求。

Nei*_*kos 6

经过几个小时的调试,我找到了原因:

您需要将第三方 cookie 设置为允许的

由于请求似乎是从询问窗口发出的,因此它没有附加任何身份验证 cookie,这反过来又给出响应NOT_AUTHORIZED,同时在电报客户端中“登录”您。

由于服务器不知道 cookie 未设置,因此无法说什么。

TL;DR:如果您想以用户身份使用 Telegram Login,请不要禁用第三方 cookie。

我必须添加一个小文本解释,以便如果用户确实禁用了它们,则会向他们显示。