个人博客的鉴权方案

2023-01-29 11:42:58 +08:00
 yaocy

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

场景需求是:

  1. 首先就打算自己用,所以觉得做登录没有必要
  2. 很明显博客会有后台编辑等需要鉴权的场景

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

2700 次点击
所在节点    问与答
25 条回复
7gugu
2023-01-29 11:44:26 +08:00
直接用 wordpress 一步到位
gra
2023-01-29 11:45:40 +08:00
做个登录呗,最次一个字段,没注册,简单登录验证最方便
opengps
2023-01-29 11:46:20 +08:00
我就是自己用了一个特别的路径,自己知道,然后再所有添加修改的地方,增加一个密码框就行了
boks
2023-01-29 11:48:28 +08:00
?p=xxxxxx
yaocy
2023-01-29 11:55:50 +08:00
@7gugu 不行,我就要手搓(手动狗头)
loading
2023-01-29 11:56:20 +08:00
建议 localhost
Kinnice
2023-01-29 12:02:18 +08:00
不要在线的后台了,只搭建个本地的后台编辑器,每次本机编辑好,生成静态文件,同步到服务器
retrocode
2023-01-29 12:05:03 +08:00
```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
2023-01-29 12:05:21 +08:00
同意楼上,我就是 hugo+vscode+syncthing
retrocode
2023-01-29 12:05:35 +08:00
```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
2023-01-29 12:07:41 +08:00
之前给文档站加临时权限搞的, 基本思路就上面这样,简单粗暴, 说白了就是前端存个明文 cookie
Herry001
2023-01-29 12:19:26 +08:00
照着 Wordpress 的逻辑抄呗……
手搓 OAuth 接第三方登录可比写一个账号系统麻烦多了(你甚至可以把账号和密码写死在代码里
HugoChao
2023-01-29 12:23:08 +08:00
这个可以参考日网揭示板的设计,你弄个可编辑功能给所有人,然后编辑需要密码就可以了
shuxhan
2023-01-29 12:52:47 +08:00
@shalingye 巧了,我也是这个方案,一模一样
blackboom
2023-01-29 13:02:41 +08:00
如果使用数据库的话,单独一张表作 KV 使用会轻便很多。

https://github.com/blackstorm/goose 就将所有配置放在一张表中。
hsfzxjy
2023-01-29 13:25:44 +08:00
我的博客静态挂在 github pages 上,其中一部分是公开的,一部分要密码才能查看

我的做法:魔改了 hexo 的渲染器,在渲染私有文章时做一次对称加密,加密过的内容隐藏写入页面,并在页面上放个密码框。要读文章就输入正确的密码解密。整个过程不需要服务器参与
taine221
2023-01-29 13:29:09 +08:00
静态 Blog 就没有这个烦恼
Private Repo + Github Action 远程服务器推送
potatowish
2023-01-29 13:33:21 +08:00
配合 Google Authenticator 做动态密码登录认证
blackboom
2023-01-29 14:02:26 +08:00
@potatowish 这个想法不错
hsuyeung
2023-01-29 14:04:49 +08:00
#7 的方案感觉可以。我自己的还是做了一个简单的登录功能,没有注册,可以生成帐号。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/911271

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX