【发布时间】:2020-12-25 18:58:27
【问题描述】:
编辑
我知道这些信誉不应该出现在互联网上,但我在这里变得绝望 + 无论如何我都会删除客户端/租户。
我设置了一条路线:
router.get('/login', cors, async (req, res) => {
try {
console.log('Entered')
await auth0.handleLogin(req, res)
} catch (err) {
return res.status(500).end()
})
Entered 行被打印,但是我一直遇到一个 cors 错误,
Access to XMLHttpRequest at 'https://dev-..' (redirected from 'http://localhost:3000/login')
from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
我已经把头发拔了好几天了。
我不确定为什么会出现错误 No 'Access-Control-Allow-Origin' header is present on the requested resource,因为我已将 cors 包添加到我的自定义 Express 服务器。
我在这里做错了什么?我关注了this tutorial,它使用了passport-auth0,我也关注了这些docs(这是上面存储库中使用的包)——两种方法都显示相同的错误。
在我的 Auth0 仪表板中,我已将允许的来源设置如下(即,我关注了this:
我不知道从这里去哪里。如果我从控制台错误中手动粘贴 URL,https://dev-..,那么它会将我带到身份验证页面并成功将我重定向到 localhost:3000/。
Here 是我的初始 Auth0 设置。
我在网上看到过一些类似的问题,比如this one,但是创建一个新客户对我没有帮助,其他答案也没有。我几乎浏览了 Auth0 社区论坛上的所有相关问题。
我还克隆并运行了示例 here,它与他们的页面 API 一起使用。我开始想,我不能将这个 nextjs-auth0 包与自定义服务器一起使用。
【问题讨论】:
-
因为您将前端请求重定向到该
https://dev-..URL,并且响应从该 URL 返回,所以仅对您的http://localhost:3000服务器启用 CORS 是不够的。相反,https://dev-..服务器也必须启用 CORS。显然不是。如果它是一个 OAuth 端点,这是正常的,并且预期它没有启用 CORS。这是因为 OAuth 端点并不意味着通过 XHR 或 Fetch 或其他方式接收脚本化的 ajax 请求。相反,用户应该被导航到端点,然后导航回来。您无法使用 XHR 导航用户。 -
我挖得更深了,我明白你在说什么。但是,正如我在问题中所示,我已将
http://localhost:3000设置为允许的来源 (CORS) 和允许的 Web 来源。就像我说的,我不知道从这里去哪里 -
我之前没有在 Next.js 中尝试过这种方法,但是 auth0 可以与其他几个 JS 框架一起使用,没有太多问题。我猜想如何重定向到 auth0 登录页面存在问题。基本上它不应该在登录时发出 CORS 请求,它应该将整个浏览器发送到 auth0 域以登录,然后将客户端发送回令牌。我已经克隆了你的仓库,奇怪的是 handleLogin 方法没有向浏览器返回 302。
-
我认为问题出在“处理登录的自定义服务器”中。第二个示例是资源服务器 - 所以这是一个使用访问令牌允许 authn/z 访问 API 的后端。问题是您如何获取令牌 - 您的 UI 需要执行 302 重定向到 auth0 登录页面(不使用 XHR),允许 auth0 处理所有登录过程(可以包括注册、2fa 等)然后它将重定向使用令牌返回您的应用