官方文档已经非常优秀了
可我在部署的时候还是出现了很多问题这里来说一下我的部署过程[^本文部分内容来自官方文档]
Fork这个项目
修改配置文件
虽然官方说只需要调整登录信息 但我实测 自建API的下载速度是要比官方API的快的
(可能玄学)在
site.config.js
替换spencer@spwoo.onmicrosoft.com
为你的Onedrive邮箱 并修改baseDirectory
为你想要共享的文件夹 (如果想共享根目录可不改动)修改API为自建
注册应用程序
Microsoft Azure App registrations( OneDrive 国际版、企业版与教育版,E5 订阅专用)
Microsoft Azure.cn App registrations(OneDrive 世纪互联专用)
随意输入一个名称 例如: My-OD-Key
受支持的账号类型 选择
任何组织目录(任何 Azure AD 目录 - 多租户)中的帐户和个人 Microsoft 帐户(例如,Skype、Xbox)
即可重定向URI平台选择
WEB
网址填入http://localhost
即可完成后应如下图
点击注册即完成
获取你的 客户端ID 与 客户端Key
你的应用程序(客户端) ID 就是
api.config.js
里的clientId
,它应该出现在 概述 > 概要你的 client secret (客户端密钥) 需要手动获取
点击 证书与密码。
点击 新客户端密码
时间选择最长 名字随意
完成后应如下图
最后,点击 添加 ,然后复制 client_secret 的值并妥善保管。(只有一次复制机会)
修改API权限
Microsoft Graph API 可以设置 API 范围,我们只需要以下三个(
api.config.js
里要求的):1
user.read files.read.all offline_access
点击 API权限,再点击 Microsoft Graph,再点击 委托的权限,然后搜索:
User.Read(这应该一开始就勾上了)
Files.Read.All
offline_access
选择全部三个并点击 更新权限。
完成后应如下图
现在,你就准备好你自己的 clientId
与 clientSecret
了。
修改
api.config.js
你可以直接将
clientId
修改为你自己的clientId
。但是,client secret 需要保密,你需要在这里进行 AES 加密
填写 client secret 后,你应该得到一个长得像这样的字符串:
1 U2FsdGVkX1830zo3/pFDqaBCVBb37iLw3WnBDWGF9GIB2f4apzv0roemp8Y+iIxI3Ih5ecyukqELQEGzZlYiWg==
将它替换到
obfuscatedClientSecret
里。
如果你修改了
redirectUri
为其他值,你也要在api.config.js
里设置好。
- 导入到 Vercel 并部署
在 Vercel 导入 你自己的 onedrive-vercel-index GitHub 项目,并进行以下设置:
修改 Build command 为
pnpm build
.修改 Install command 为
pnpm install
.完成后应如下图
默认的也许能正常工作,但最好还是自定义这一项目。
然后点击部署,Vercel 将会下载你的项目并进行部署。这次部署有可能会失败,这是因为我们还没有设定
REDIS_URL
环境变量。这就是我们接下来要做的。
- 连接到 Redis
创建一个 Redis 数据库,并且将数据库的访问链接填写到 Vercel 的
REDIS_URL
环境变量里。Redis 数据库是用于存储在 OAuth 时获取的access_tokens
与refresh_tokens
的。我们推荐使用 Upstash ,它完全免费,并且与 Vercel 深度合作,详情请参考 Vercel Integration。(请忽略最后一步时让你 Create Your Redis Client ,onedrive-vercel-index 已经为你处理好了)。
你可以使用你自己的 Redis 数据库,只要有 Vercel 能用的访问链接就行。
无论你用什么方式,你应该在 Vercel 的
REDIS_URL
环境变量里填好一个类似这样的 Redis URL:
1 | redis://:xxx...@some-thing-like-35533.upstash.io:35533 |
如果你为 Redis 数据库启用了 传输加密:
1 | rediss://:xxx...@some-thing-like-35533.upstash.io:35533 |
- 重新部署
最后,重新进行一次部署。并在部署完成后访问 Vercel 提供的链接,
onedrive-vercel-index
将会引导你进行 OAuth 认证。
- 进行认证
检查此页面上的参数是否正确,尤其是
client_id
与client_secret
(加密的),他们应该与你的项目里的一致。你还要检查一下 API 权限,应该只需要这三个:
user.read
: 在进行 OAuth 时认证你的身份,防止某些傻逼通过重新认证雷普你的项目。
files.read.all
: 用于访问你的 OneDrive 的文件
offline_access
: 就是……用来离线访问 🙃如果一切都准备好了,就来到第二步。如果有些什么差错,检查你的
config/api.config.js
然后重新部署。
获取认证码
我们已经基于
config/api.config.js
给你准备好认证链接了。点击链接,你将会进入一个新标签页并进行登录。请确保你登陆的账户与你在config/site.config.js
的userPrincipalName
里设置的一致。完成登录后,你将会跳转到
http://localhost
,尽管它显示无法访问,你只需要复制地址栏中的地址然后粘贴到第二步的输入框里。onedrive-vercel-index 会自动识别用于获取access_token
与refresh_token
的认证码,然后点击 Get tokens 就行。获取凭证
你只需要等待几秒钟,页面上就会显示成功提示以及几行凭证,请点击 Store tokens ,你的凭证就会保存到 Redis 数据库里。
这个过程中我们一直在检查 你的身份 ,所以如果出现了 “Don’t pretend to be the site owner” 提示,请检查
config/site.config.js
里的userPrincipalName
是否填写正确。如果你认证结束后被重新跳转到步骤一,而你确认一切都没有问题时,请等待几秒并手动回到主页再刷新,Redis 数据库存取凭证需要一点儿时间。
最后,你将会跳转到属于你的全新 onedrive-vercel-index ,开始享受这一切 :) !
这是我自己搭建的Drive
如果有问题可以在评论区提问