Skip to content
This repository has been archived by the owner on Jan 1, 2022. It is now read-only.

Problem when putting REFRESH_TOKEN #16

Closed
FrnkPsycho opened this issue Aug 26, 2020 · 17 comments
Closed

Problem when putting REFRESH_TOKEN #16

FrnkPsycho opened this issue Aug 26, 2020 · 17 comments
Labels
question Common questions

Comments

@FrnkPsycho
Copy link

你好!感谢大佬写的这么棒的项目!
不过在我操作过程中发现当我在输入REFRESH_TOKEN的时候提示如下:

C:\Users\Calmpsycho\Documents\onedrive-cf-index-master>wrangler secret put REFRESH_TOKEN
Enter the secret text you'd like assigned to the variable REFRESH_TOKEN on the script named music:
[很长的一串密钥]
 Creating the secret for script name music
Error:  Code 10054: workers.api.error.text_binding_too_large
 Your secret is too large, it must be 1kB or less

提示我密钥超过1kb的限制,看了一下密钥长度为1050到1060字节不等(刷新了好几次),的确超出了限制。
可是我不管怎么修改设置都没办法缩短长度
请问怎么解决呢?谢谢!
(知识匮乏还望大佬包涵)

@spencerwooo
Copy link
Owner

spencerwooo commented Aug 26, 2020

@FrnkPsycho REFRESH_TOKEN 应该只有这些,准确来说是 354 字符:

image

@spencerwooo spencerwooo added the question Common questions label Aug 26, 2020
@FrnkPsycho
Copy link
Author

@spencerwooo 感谢回复!
我也试着用insomnia手动post 但是结果还是一样的 密钥还是那么长...


而且我发现我的token开头非常很奇怪,不知道有没有关系

或许可能是因为onedrive账号的原因?我的账号是office a1订阅

@spencerwooo
Copy link
Owner

@FrnkPsycho 可能是 OneDrive 账号问题,你实在存不下的话,试试把你的 refresh_token 单独存到 Firebase 里面,然后像调用 access_token 这里 /src/auth/onedrive.js 去请求。

@Micraow
Copy link

Micraow commented Aug 27, 2020

我也有同样的问题,是office E5订阅,请问您能说详细一些吗? @spencerwooo

@FrnkPsycho 可能是 OneDrive 账号问题,你实在存不下的话,试试把你的 refresh_token 单独存到 Firebase 里面,然后像调用 access_token 这里 /src/auth/onedrive.js 去请求。

@Micraow
Copy link

Micraow commented Aug 27, 2020

另外,是access_token也要存到Firebase 里面吗?
还有,Firebase那里,是新建一个没有值的键:
auth:''
就可以了,对吗?

@spencerwooo
Copy link
Owner

@Micraow

另外,是 access_token 也要存到 Firebase 里面吗?

不是,上面是说 Cloudflare 的环境变量有长度限制情况下的 workaround:把刷新 access_token 用的 refresh_token 存在 Firebase 里面。之后 onedrive-cf-index 会在 Cloudflare Workers 上面通过你存好的 refresh_token 来自动刷新和存储 access_token 等一系列鉴权参数。总之:

  • access_token 应该是 onedrive-cf-index 自动获取并缓存到 Firebase 的;
  • refresh_token 则是我们手动获取一次之后存储在 Cloudflare Workers 环境变量或在长度溢出情况下手动存在 Firebase 里面的。

还有,Firebase 那里,是新建一个没有值的键:auth: '' 就可以了,对吗?

是的,应该没问题,Firebase 里面存储的 auth 值类似这样子:

image

@spencerwooo
Copy link
Owner

spencerwooo commented Aug 27, 2020

@Micraow @FrnkPsycho 手动存 refresh_token 的话,可以在这里手动新建一个值叫做 refresh_token 并填入你手动获取的 Token:

image

这样你就可以在 ./src/config/default.js 需要你填入 REFRESH_TOKEN 这里通过类似这样的方法获取这个 token 了:

别看了,这个有 bug……看下面:#issuecomment-681968724
// ./src/config/default.js
const refresh_token = await (await fetch(`https://<你的 Firebase URL 地址>/refresh_token.json?auth=${FIREBASE_TOKEN}`)).text()

const config = {
  /**
   * You can use this tool http://heymind.github.io/tools/microsoft-graph-api-auth
   * to get following params: client_id, client_secret, refresh_token & redirect_uri.
   */
  refresh_token: refresh_token,
  // ...
}

image

@Micraow
Copy link

Micraow commented Aug 27, 2020

好的,谢谢,但是今天下午我发现。我的令牌已经变回了原来的那种QAQ的样子,所以我就直接添加了。

@FrnkPsycho
Copy link
Author

@spencerwooo 可能问题有点笨,毕竟没有学习js的经验,所以只能copy您给出的代码,然后出现了一下错误

C:\Users\Calmpsycho\Documents\onedrive-cf-index-master>wrangler preview
 ./src/config/default.js 1:29
Module parse failed: Cannot use keyword 'await' outside an async function (1:29)
You may need an appropriate loader to handle this file type.
> const refresh_token = await (await fetch(`https://{非常认真地填写了地址}/refresh_token.json?auth=${FIREBASE_TOKEN}`)).text()
|
|
 @ ./src/index.js 1:0-37 38:13-19 43:6-12 43:22-28 48:15-21 54:20-26 55:18-24 57:30-36 106:10-16 109:31-37
Error: webpack returned an error. You may be able to resolve this issue by running npm install.

好像是什么语法的问题?希望能照顾我这个小白订正一下QAQ

@spencerwooo
Copy link
Owner

spencerwooo commented Aug 27, 2020

@spencerwooo 可能问题有点笨,毕竟没有学习js的经验,所以只能copy您给出的代码,然后出现了一下错误

C:\Users\Calmpsycho\Documents\onedrive-cf-index-master>wrangler preview
 ./src/config/default.js 1:29
Module parse failed: Cannot use keyword 'await' outside an async function (1:29)
You may need an appropriate loader to handle this file type.
> const refresh_token = await (await fetch(`https://{非常认真地填写了地址}/refresh_token.json?auth=${FIREBASE_TOKEN}`)).text()
|
|
 @ ./src/index.js 1:0-37 38:13-19 43:6-12 43:22-28 48:15-21 54:20-26 55:18-24 57:30-36 106:10-16 109:31-37
Error: webpack returned an error. You may be able to resolve this issue by running npm install.

好像是什么语法的问题?希望能照顾我这个小白订正一下QAQ

oh shit,不对,这么写有问题,我傻了,我重新本地写一下,稍等。

Edit: @FrnkPsycho 这个 refresh_token 只有 ./src/auth/onedrive.js 里面用到了,在这个文件里面:

// ./src/auth/onedrive.js

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

 const refresh_token = await (await fetch(`https://<你的 Firebase URL 地址>/refresh_token.json?auth=${FIREBASE_TOKEN}`)).text()

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

@FrnkPsycho
Copy link
Author

@spencerwooo 解决了 感谢!

不过我发现了和之前heymind大佬那个项目一样的问题,单个目录只能显示200个文件夹,请问这是onedrive本身问题还是cloudflare的请求限制?

能够解决我的疑问就更好了

@spencerwooo
Copy link
Owner

@FrnkPsycho 单个目录只能显示 200 个文件夹是我没写 pagination,其实是可以支持的,OneDrive 有 API,等我有空实现,可以开个新 issue 来 track 这个问题。

@FaintGhost
Copy link

请问一下大佬,按照这个issue配置好之后,使用wrangler preview之后显示:

worker.js:1 Uncaught ReferenceError: REFRESH_TOKEN is not defined
    at Module.<anonymous> (worker.js:1)
    at t (worker.js:1)
    at worker.js:1
    at worker.js:1

onedrive.js里面写的是:

  const refresh_token = await (await fetch(`https://认真的抄写/refresh_token.json?auth=${FIREBASE_TOKEN}`)).text()
  // Fetch access token from Google Firebase Database
  const data = await (await fetch(`${config.firebase_url}?auth=${FIREBASE_TOKEN}`)).json()
  if (data && data.access_token && timestamp() < data.expire_at) {
    console.log('Fetched token from storage.')
    return data.access_token
  }

  const resp = await fetch(oneDriveAuthEndpoint, {
    method: 'POST',
    body: `client_id=${config.client_id}&redirect_uri=${config.redirect_uri}&client_secret=${config.client_secret}
    &refresh_token=${refresh_token}&grant_type=refresh_token`,
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  })

@spencerwooo
Copy link
Owner

请问一下大佬,按照这个issue配置好之后,使用wrangler preview之后显示:

worker.js:1 Uncaught ReferenceError: REFRESH_TOKEN is not defined
    at Module.<anonymous> (worker.js:1)
    at t (worker.js:1)
    at worker.js:1
    at worker.js:1

@FaintGhost 你得把 src/config/default.js 里面的 REFRESH_TOKEN 删掉,如果你用这个办法的话,因为你这时候并没有在 Cloudflare Workers 里面定义 REFRESH_TOKEN 这个环境变量,所以这里才会报错的。

@FaintGhost
Copy link

感谢回复,但是我把src/config/default.js里的REFRESH_TOKEN删掉之后就会变成另一个错误如下:

Uncaught (in promise) getAccessToken error "{\"error\":\"invalid_grant\",\"error_description\":\"AADSTS9002313: Invalid request. Request is malformed or invalid.\\r\\nTrace ID: 5fc808fa-f814-4478-af81-e060452e2800\\r\\nCorrelation ID: 19baf150-6226-467f-a264-7d8b0183ca54\\r\\nTimestamp: 2020-09-21 02:14:16Z\",\"error_codes\":[9002313],\"timestamp\":\"2020-09-21 02:14:16Z\",\"trace_id\":\"5fc808fa-f814-4478-af81-e060452e2800\",\"correlation_id\":\"19baf150-6226-467f-a264-7d8b0183ca54\",\"error_uri\":\"https://login.microsoftonline.com/error?code=9002313\"}"
Uncaught (in response) Error: internal error

@spencerwooo
Copy link
Owner

@FaintGhost 那你这里还是后面请求的配置问题

@FaintGhost
Copy link

哭瞎了,我乖乖按照教程配置的,我试了一下如果直接把refresh_token填写在src/config/default.js文件就可以正常使用,但是不知道这样会不会有什么影响

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
question Common questions
Projects
None yet
Development

No branches or pull requests

4 participants