yaocy
V2EX  ›  问与答

个人博客的鉴权方案

  •  
  •   yaocy · Jan 29, 2023 · 3603 views
    This topic created in 1225 days ago, the information mentioned may be changed or developed.

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

    场景需求是:

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

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

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

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

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

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

    这个场景直接内网访问不就好了,这就不需要鉴权了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3039 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 14:28 · PVG 22:28 · LAX 07:28 · JFK 10:28
    ♥ Do have faith in what you're doing.