onedrive-cf-index 搭建教程

部署此项目较为麻烦,按照教程安装结果发现都是坑。如果各位没有耐心,请转onemanger安装,onemanger安装较为简单。

在线体验

项目地址
演示版

获取Token

获取client_id和client_secret

进入azure面板应用注册界面,注册一个新app名称【使用微软账号】,重定向URL:https://heymind.github.io/tools/microsoft-graph-api-auth 也可以用http://localhost,但后期redirect_uri改为http://localhost

点击确定后跳转到概要,记下其中的应用程序(客户端) ID。这个是Client_id 的值。

若你以后想添加和修改重定向URL可以在下图修改

设置【API权限】

至少选择 offline_access, Files.Read, Files.Read.All .
点击授权

接着我们获取Secrets,点击【证书和密码】,名字随意,期限为永久:

复制生成的密钥(即Client_secret),请注意此处密钥仅出现一次,以后就不会再出现了。(不过也没什么,删掉再建就行)。

获取refresh_token

进入获取Token页面,获取 refresh_token

后续按照流程绑定账号,取得refresh_token,妥善保管,接下来我们会用到。

配置CloudFlare

登录你的CloudFlare,进入任意一域名下,右侧栏(往下翻)里头会有俩ID(zone_id和account_id),复制:

从首页菜单右侧那个 worker 图标中进入 worker 配置项,点击管理 worker -> 创建 worker,可以修改一下左上角的部分域名名字(也是整个 worker 的名字),然后点击保存并部署。

如何你觉得域名太长你也可以自定义域名!在你域名下点击【workers】,点击【添加路由】


到域名解析DNS服务商配置,我以dnspod为例(注:你可以将域名放在cloudflare上,我使用的是Cloudflare Partners,以CNAME记录接入cloudflare),主机记录为drive(子域名) 记录值为worker 配置的域名

本地wrangler部署

项目地址
1、如安装了node的可以忽略这步;没装 node 的,可以按照下面装个 nvm 8:

1
2
3
choco install nvm -y
nvm install latest --lts
nvm on

2、拉取项目,并安装
1
2
3
4
5
6
7
8
git clone https://github.com/spencerwooo/onedrive-cf-index.git
cd .\onedrive-cf-index\
npm i @cloudflare/wrangler -g
npm install
# 使用 wrangler 登录 CloudFlare 账户
wrangler login
# 使用这一命令检查自己的登录状态
wrangler whoami

3、修改项目目录下的 wrangler.toml

  • name:worker 的名字
  • account_id:账户 id
  • zone_id:区域 id

创建 KV bucket,如果待会要在本地预览效果的话,两个命令都要打(话说回来,这两个命令每个都会产生一个 id 和 一个 preview id,但两组数值串里面的 id 其实是一样的)。记下第一个命令生成的 id 和第二个命令生成的 preview id。

1
2
3
4
5
# 创建 KV bucket
wrangler kv:namespace create "BUCKET"

# 创建包括预览功能的 KV bucket
wrangler kv:namespace create "BUCKET" --preview

回到 wrangler.toml,在 kv_namespaces: 下把刚刚记下的 id 和 preview id 填进去。
注:id和preview id你也可以在coudflare中找到

修改 src/config/default.js

  • client_id:你懂得;
  • base:你想要展示的网盘文件夹。要以斜杠 / 打头。默认为/pubic
    用微软账户登录OneDrive,新建文件夹,名字为“Public”(注:base中设置的文件夹名,/是整个网盘)

使用 wrangler 添加 Cloudflare Workers 环境变量:

1
wrangler secret put REFRESH_TOKEN

随后会提示你输入 refresh_token,粘贴过去然后回车确定。
一般是不成功的,refresh_token 大于 1KB 导致需要使用 Cloudflare Worker KV 存储来解决
方法:

之后修改代码,在 ./src/auth/onedrive.js 里面加一个获取 refresh_token 的代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
// ./src/auth/onedrive.js

// ...
export async function getAccessToken() {
const timestamp = () => {
return Math.floor(Date.now() / 1000)
}

const refresh_token = await BUCKET.get('refresh_token')

// 之后所有的 config.refresh_token 都直接改为 refresh_token
// ...
}

这样应该就可以了,顺便还要把其他原有定义了 REFRESH_TOKEN 的地方删掉(比如 ./src/config/default.js 里面的 refresh_token: REFRESH_TOKEN, 一行)。

添加client_secret

1
wrangler secret put CLIENT_SECRET

提示你输入 client_secret,粘贴过去然后回车确定。

设置添加 AUTH_PASSWORD
如果不需要 Private 目录功能可以将 src/auth/config.js 文件中的 AUTH_PASSWORD 注释掉:
您可以通过将文件夹的名称添加到ENABLE_PATHS来限制对文件夹的访问(即声明私有文件夹)
您可以选择使用该AUTH_ENABLED(默认为文件夹名为:🌞 Private folder)文件中的切换变量来启用此功能,并且可以NAME使用wrangler指定用户名(默认为guest)和密码(下面你设置的密码)。

1
wrangler secret put AUTH_PASSWORD

提示你输入 password ,你设置你的密码

4、预览

1
wrangler preview


修改网页页眉和页脚
页脚:直接修改 src/folderView.js
页面的 header,直接修改 src/render/htmlWrapper.js

5、正式部署

1
wrangler publish

一切顺利的话,访问刚刚自己在 cf 绑定的二级域名即可。

-------------------本文结束 感谢您的阅读-------------------
0%