imsun / gitment

A comment system based on GitHub Issues.
https://imsun.github.io/gitment/
MIT License
4.06k stars 347 forks source link

Validation Failed ID长度问题建议 #116

Open cfmy opened 6 years ago

cfmy commented 6 years ago

现版本默认的 id: window.location.pathname 还是有可能造成长度过长导致初始化Validation Failed 希望可以更改一个默认值,利用MD5之类的啥玩意把路径处理成较短的字符串

xjzsq commented 6 years ago

可以通过改地址的输出格式,并把id改为window.location.pathname来缩短labels的长度,详细的可以看我的博客:http://www.xjdesyxx.top/2018/02/07/errsln/

cfmy commented 6 years ago

@xjzsq 只要不处理ID字符串或者更改第三方ID长度限制位数,就仍会出现这个问题 不考虑第三方的话,只有压缩ID字段才算稳定解决方案吧,个人拙见

xjzsq commented 6 years ago

@cfmy 这倒是,用这我种方法,如果前面的地址特别长或者subtitle写的很长的话,也会出现问题,不过应该不会有人申请那么长的域名吧...

qd-quickapp commented 6 years ago

@xjzsq 真的是大牛 !!

qd-quickapp commented 6 years ago

@xjzsq 感谢!!

xjzsq commented 6 years ago

其实我只是蒟蒻,我连HTML都不会写,而且上面的想法是我找了一天的解决方案突然想到的...

zhangcaocao commented 6 years ago

安装这个插件,https://github.com/rozbo/hexo-abbrlink 可以将链接生成,随机数。。嗯,不用去修改写好的文章了.

xjzsq commented 6 years ago

@zhangcaocao 大佬!

zhangcaocao commented 6 years ago

@xjzsq 哈哈哈,我也是在搜索了才好久发现的喃。。

iHTCboy commented 6 years ago

出现 Error:validation failed

我想到一个更好的方法,用文章的时间,这样长度是保证在50个字符内,完美解决! id: '<%= page.date %>'

具体原因可以查看我博客:https://ihtcboy.com/2018/02/25/2018-02-25_Gitment评论功能接入踩坑教程/

zhaiyh07 commented 6 years ago

@zhangcaocao 感谢,已经解决。

YummyLau commented 6 years ago

在 themes\next\layout_third-party\comments 目录下修改gitments.swig,找到以下代码修改

      function renderGitment(){
        var gitment = new {{CommentsClass}}({
-           id: window.location.pathname,
+           id: '{{ page.date }}',
            owner: '{{ theme.gitment.github_user }}',
            repo: '{{ theme.gitment.github_repo }}',
            {% if theme.gitment.mint %}
            lang: "{{ theme.gitment.language }}" || navigator.language || navigator.systemLanguage || navigator.userLanguage,
            {% endif %}

之后重新hexo g -d就ok了,请保证没有浏览器缓存。

iHTCboy commented 6 years ago

@Johnny Law 如果改为用time为id,那么以前的文章的评论全部重新inital,这个请注意啦!

jianjieluo commented 6 years ago

@iHTCboy ,好的,其实在理论上只需要在id上面再做一点trick比如说添加一个? :语句来判断一次window.location.pathname.length 是否小于50,只把过长的id用time来表示,应该可以做到向前兼容。

eg. id: (window.location.pathname.length < 50) ? window.location.pathname : "{{ page.date }}"

缺点应该就是id的标准会不统一但是理论上还是可以保持唯一性。鄙人使用 python 的 Jinja2 模板,以上的代码亲测可用。

iHTCboy commented 6 years ago

@longjj 感谢!方法不错! 如果有太多文章或者有评论的文章,大家可以试试啊!

xjzsq commented 6 years ago

@iHTCboy 也是个不错的方法! 不过试想一下如果同1s有两篇文章就有意思了...(当然没人会蠢到那么做,除了我233)

iHTCboy commented 6 years ago

@xjzsq 哈哈,同1s你能写2篇文章,我服!-x-

xuepro commented 6 years ago

我这样做的结果,是同一个评论在所有文章后面都出现?怎么处理?

heropoo commented 6 years ago

@iHTCboy 按你的方法,搞定了。再判断下文章时间,兼容以前的评论,完美😎

<script>
    var page_date = '{{ page.date }}';
    var id = window.location.href;
    if(page_date > '2018-04-31 00:00:00 +0000'){  // 兼容以前的评论
        id = page_date;
    }
    var gitment = new Gitment({
        id: id, // 可选。默认为 location.href
        owner: '',
        repo: '',
        oauth: {
            client_id: '',
            client_secret: '',
        },
    });
    gitment.render('container');
</script>
cywd commented 6 years ago

我是这么做的(博客用的jekyll)

<script>
    var str='{{ page.date | date: "%Y-%m-%d" }} {{ page.title }}';
    var id = str;
    if(str.length>=45){
        id=str.substring(0,45)+"...";
    }
    var gitment = new Gitment({
        id: id,
        owner: 'xxx',
        repo: 'xxx',
        oauth: {
            client_id: 'xxx',
            client_secret: 'xxx',
        },
    })
    gitment.render('container')
</script>