给评论框加上Github登录验证,提高评论提交门槛
本文基于 给 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 后,原页面会进行相应的响应(提示已验证,展开评论窗)。下图为相关介绍的附图,可供参阅。
一通操作之后,就能实现这个功能。其实说白了就是自己再弄个 SESSION 给验证一下。注意,当使用 Typecho 自己的账号登录时,这个 SESSION 会被顶掉,所以说用在验证游客上是没问题的,既然已经登录 Typecho 账号了,就没必要再进行验证。
现在广告都这么牛逼嘛,都能过cf验证了
背后肯定是智能的人工(悲)