V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yaocy
V2EX  ›  问与答

个人博客的鉴权方案

  •  
  •   yaocy · 53 天前 · 1757 次点击
    这是一个创建于 53 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在手搓个人网站,现在考虑鉴权的问题

    场景需求是:

    1. 首先就打算自己用,所以觉得做登录没有必要
    2. 很明显博客会有后台编辑等需要鉴权的场景
    • 绑定 IP 太死了不行
    • 三方登录考虑一下

    大大们是怎么做的?有什么思路?

    25 条回复    2023-01-30 10:12:58 +08:00
    7gugu
        1
    7gugu  
       53 天前   ❤️ 1
    直接用 wordpress 一步到位
    gra
        2
    gra  
       53 天前
    做个登录呗,最次一个字段,没注册,简单登录验证最方便
    opengps
        3
    opengps  
       53 天前
    我就是自己用了一个特别的路径,自己知道,然后再所有添加修改的地方,增加一个密码框就行了
    boks
        4
    boks  
       53 天前
    ?p=xxxxxx
    yaocy
        5
    yaocy  
    OP
       53 天前
    @7gugu 不行,我就要手搓(手动狗头)
    loading
        6
    loading  
       53 天前
    建议 localhost
    Kinnice
        7
    Kinnice  
       53 天前
    不要在线的后台了,只搭建个本地的后台编辑器,每次本机编辑好,生成静态文件,同步到服务器
    retrocode
        8
    retrocode  
       53 天前
    ```php

    <?php
    $auth = array('密码 1','密码 2');
    if (empty($_COOKIE["token"])||!in_array($_COOKIE["token"],$auth)) {
    // 校验失败,不显示后续内容
    $loginhtml = <<<EOT
    <html>
    <head>
    <meta charset="utf-8">
    <title>验证失败</title>
    </head>
    <body>
    <h1>认证已过期,请输入密码</h1>
    <input type="tel" id="mobile" description="输入你的密码即可" />
    <button type="button" onclick="save()">提交</button>
    </body>
    <script type="text/javascript">
    function save() {
    var mobile = document.getElementById('mobile').value;
    var exp = new Date();
    exp.setTime(exp.getTime() + 30 * 24 * 60 * 60 * 1000);
    document.cookie = "token=" + mobile + ";expires=" + exp.toGMTString();
    location.reload();
    }
    </script>
    </html>
    EOT;
    echo $loginhtml;exit();
    } else {
    // 记录密码访问记录
    $log_file = './log/log_'.date('Ymd',time()).'.log';
    $content = date('Y-m-d H:i:s',time()).' '.$_COOKIE["token"]."\r\n";
    file_put_contents($log_file,$content, FILE_APPEND);
    }

    ```
    // 后面业务内容随便整
    shalingye
        9
    shalingye  
       53 天前 via Android
    同意楼上,我就是 hugo+vscode+syncthing
    retrocode
        10
    retrocode  
       53 天前
    ```php

    <?php
    $auth = array('密码 1','密码 2');
    if (empty($_COOKIE["token"])||!in_array($_COOKIE["token"],$auth)) {
    // 校验失败,不显示后续内容
    $loginhtml = <<<EOT
    <html>
    <head>
    <meta charset="utf-8">
    <title>验证失败</title>
    </head>
    <body>
    <h1>认证已过期,请输入密码</h1>
    <input type="tel" id="mobile" description="输入你的密码即可" />
    <button type="button" onclick="save()">提交</button>
    </body>
    <script type="text/javascript">
    function save() {
    var mobile = document.getElementById('mobile').value;
    var exp = new Date();
    exp.setTime(exp.getTime() + 30 * 24 * 60 * 60 * 1000);
    document.cookie = "token=" + mobile + ";expires=" + exp.toGMTString();
    location.reload();
    }
    </script>
    </html>
    EOT;
    echo $loginhtml;exit();
    } else {
    // 记录密码访问记录
    $log_file = './log/log_'.date('Ymd',time()).'.log';
    $content = date('Y-m-d H:i:s',time()).' '.$_COOKIE["token"]."\r\n";
    file_put_contents($log_file,$content, FILE_APPEND);
    }

    ```
    // 后面业务内容随便整
    retrocode
        11
    retrocode  
       53 天前
    之前给文档站加临时权限搞的, 基本思路就上面这样,简单粗暴, 说白了就是前端存个明文 cookie
    Herry001
        12
    Herry001  
       53 天前
    照着 Wordpress 的逻辑抄呗……
    手搓 OAuth 接第三方登录可比写一个账号系统麻烦多了(你甚至可以把账号和密码写死在代码里
    HugoChao
        13
    HugoChao  
       53 天前
    这个可以参考日网揭示板的设计,你弄个可编辑功能给所有人,然后编辑需要密码就可以了
    shuxhan
        14
    shuxhan  
       53 天前
    @shalingye 巧了,我也是这个方案,一模一样
    blackboom
        15
    blackboom  
       53 天前 via iPhone
    如果使用数据库的话,单独一张表作 KV 使用会轻便很多。

    https://github.com/blackstorm/goose 就将所有配置放在一张表中。
    hsfzxjy
        16
    hsfzxjy  
       53 天前 via Android
    我的博客静态挂在 github pages 上,其中一部分是公开的,一部分要密码才能查看

    我的做法:魔改了 hexo 的渲染器,在渲染私有文章时做一次对称加密,加密过的内容隐藏写入页面,并在页面上放个密码框。要读文章就输入正确的密码解密。整个过程不需要服务器参与
    taine221
        17
    taine221  
       53 天前
    静态 Blog 就没有这个烦恼
    Private Repo + Github Action 远程服务器推送
    potatowish
        18
    potatowish  
       53 天前 via iPhone   ❤️ 1
    配合 Google Authenticator 做动态密码登录认证
    blackboom
        19
    blackboom  
       53 天前
    @potatowish 这个想法不错
    hsuyeung
        20
    hsuyeung  
       53 天前
    #7 的方案感觉可以。我自己的还是做了一个简单的登录功能,没有注册,可以生成帐号。
    dzdh
        21
    dzdh  
       53 天前
    客户端证书
    lookStupiToForce
        22
    lookStupiToForce  
       53 天前
    一路看下来你们是真的闲,自己的博客自己登后台就行了还要鉴权
    而且稍微有个差池被人 oday 了 /爆破了哭都没地儿哭
    kirito41dd
        23
    kirito41dd  
       53 天前
    我真不是打广告,用 hugo 整个静态网站吧,放博客也比较省心
    https://www.kirito.info/blog-with-gitpage-and-ci/
    JustSong
        24
    JustSong  
       53 天前 via Android
    启动时接受一个命令行参数或者从环境变量中读取一个 token ,用这个 token 来做鉴权,我的微博客之前就是这样干的,https://github.com/songquanpeng/microblog
    sprite82
        25
    sprite82  
       52 天前
    > 后台编辑等需要鉴权的场景

    这个场景直接内网访问不就好了,这就不需要鉴权了
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   2964 人在线   最高记录 5556   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 11:24 · PVG 19:24 · LAX 04:24 · JFK 07:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.