官方文档已经非常优秀了 可我在部署的时候还是出现了很多问题 这里来说一下我的部署过程[^本文部分内容来自官方文档]

  1. Fork这个项目

  2. 修改配置文件

    虽然官方说只需要调整登录信息 但我实测 自建API的下载速度是要比官方API的快的(可能玄学)

    1. site.config.js替换 spencer@spwoo.onmicrosoft.com 为你的Onedrive邮箱 并修改baseDirectory为你想要共享的文件夹 (如果想共享根目录可不改动)

    2. 修改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 ,它应该出现在 概述 > 概要

        应用程序(客户端) ID

      • 你的 client secret (客户端密钥) 需要手动获取

        1. 点击 证书与密码

        2. 点击 新客户端密码

        3. 时间选择最长 名字随意

          完成后应如下图

          客户端密钥

        最后,点击 添加 ,然后复制 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

      选择全部三个并点击 更新权限

      完成后应如下图

      完成后应如图

​ 现在,你就准备好你自己的 clientIdclientSecret 了。

  1. 修改 api.config.js

    你可以直接将 clientId 修改为你自己的 clientId

    但是,client secret 需要保密,你需要在这里进行 AES 加密

填写 client secret 后,你应该得到一个长得像这样的字符串:

1
U2FsdGVkX1830zo3/pFDqaBCVBb37iLw3WnBDWGF9GIB2f4apzv0roemp8Y+iIxI3Ih5ecyukqELQEGzZlYiWg==

将它替换到 obfuscatedClientSecret 里。

如果你修改了 redirectUri 为其他值,你也要在 api.config.js 里设置好。

  1. 导入到 Vercel 并部署

在 Vercel 导入 你自己的 onedrive-vercel-index GitHub 项目,并进行以下设置:

  • 修改 Build command 为 pnpm build.

  • 修改 Install command 为 pnpm install.

    完成后应如下图

    完成后应如图

默认的也许能正常工作,但最好还是自定义这一项目

然后点击部署,Vercel 将会下载你的项目并进行部署。这次部署有可能会失败,这是因为我们还没有设定 REDIS_URL 环境变量。这就是我们接下来要做的。

  1. 连接到 Redis

创建一个 Redis 数据库,并且将数据库的访问链接填写到 Vercel 的 REDIS_URL 环境变量里。Redis 数据库是用于存储在 OAuth 时获取的 access_tokensrefresh_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
  1. 重新部署

最后,重新进行一次部署。并在部署完成后访问 Vercel 提供的链接,onedrive-vercel-index 将会引导你进行 OAuth 认证。

  1. 进行认证

Step 1 - preparing for authentication

检查此页面上的参数是否正确,尤其是 client_idclient_secret (加密的),他们应该与你的项目里的一致。你还要检查一下 API 权限,应该只需要这三个:

user.read: 在进行 OAuth 时认证你的身份,防止某些傻逼通过重新认证雷普你的项目。

files.read.all: 用于访问你的 OneDrive 的文件

offline_access: 就是……用来离线访问 🙃

如果一切都准备好了,就来到第二步。如果有些什么差错,检查你的 config/api.config.js 然后重新部署。

  1. 获取认证码

    Step 2 - getting the authorisation code

    我们已经基于 config/api.config.js 给你准备好认证链接了。点击链接,你将会进入一个新标签页并进行登录。请确保你登陆的账户与你在 config/site.config.jsuserPrincipalName 里设置的一致。

    完成登录后,你将会跳转到 http://localhost ,尽管它显示无法访问,你只需要复制地址栏中的地址然后粘贴到第二步的输入框里。onedrive-vercel-index 会自动识别用于获取 access_tokenrefresh_token 的认证码,然后点击 Get tokens 就行。

  2. 获取凭证

    Success! We have acquired the tokens that are needed

    你只需要等待几秒钟,页面上就会显示成功提示以及几行凭证,请点击 Store tokens ,你的凭证就会保存到 Redis 数据库里。

    这个过程中我们一直在检查 你的身份 ,所以如果出现了 “Don’t pretend to be the site owner” 提示,请检查config/site.config.js 里的 userPrincipalName是否填写正确。

    如果你认证结束后被重新跳转到步骤一,而你确认一切都没有问题时,请等待几秒并手动回到主页再刷新,Redis 数据库存取凭证需要一点儿时间。

最后,你将会跳转到属于你的全新 onedrive-vercel-index ,开始享受这一切 :) !
这是我自己搭建的Drive
如果有问题可以在评论区提问