给评论框加上Github登录验证,提高评论提交门槛

尚寂新
2024/10/09 21:26

本文基于 给 Typecho 评论区适配 Cloudflare Turnstile 这篇文章。

发现其实还是有能通过 Turnstile 验证并发送垃圾评论的(背后应该是智能的人工,而不是人工智能)。为了尽量避免这种情况吧,发广告的人应该一般不会注册 Github 账号,而我自己站的受众,基本人手一个 Github 账号,而且也有相应的网络条件,在理论成立之后咕咕咕了很久很久,终于今天落实了下来。

为什么不用 Typecho 自己的账号系统,原因就是我不想为每个评论者都维护一行账号信息,不想做成那种必须注册自己站账号的模式,只需要判断一下评论者能达到这个门槛,不是机器人,就可以。

PS:就不提供代码了,这边拿 AI 写的,还需要再改改,但也能用。太长时间不敲代码,差不多都忘了,而且本人目前的工作也和敲代码不相关了...只提供下大体思路。

一、OAuth 相关实现

参照阮一峰的文章:GitHub OAuth 第三方登录示例教程,一直到拿到令牌access_token为止。

判断一下是否真的拿到了令牌(我这边是粗略判断,判断令牌是不是gho_打头的),如果是,就把令牌加到 SESSION 里面,否则提示失败。

评论后端的部分参照之前我搞 Turnstile 的文,把那个XComment类给改成判断是否有上面的令牌的 SESSION 记录(切记一定要先session_start(),下同理),判断到了就放评论走,没判断到就拦下。

前台关于 UI 控制的方面也同理,也是判断这个 SESSION 在不在。

前台的弹窗,用的是window.open()这个方法,然后用opener进行两个页面之间的通信,实现当成功 OAuth 后,原页面会进行相应的响应(提示已验证,展开评论窗)。下图为相关介绍的附图,可供参阅。

opener
opener

一通操作之后,就能实现这个功能。其实说白了就是自己再弄个 SESSION 给验证一下。注意,当使用 Typecho 自己的账号登录时,这个 SESSION 会被顶掉,所以说用在验证游客上是没问题的,既然已经登录 Typecho 账号了,就没必要再进行验证。

已有 0 条评论 (旧评论在前)
  1. 暂无评论 / 0 Comment
添加新评论 (Markdown Supported)
(ノ°ο°)ノ
未验证,请点击此处跳转到 Github 进行游客身份验证。