使用概念 API 进行授权时出现错误“Missing or invalid redirect_uri”
Getting an error `Missing or invalid redirect_uri` while using notion API for authorization
我正在尝试使用 public 与概念 API 的集成,并且严格遵循文档。 Link: https://developers.notion.com/docs/authorization#authorizing-public-integrations
但是对于以下 index.html 我收到错误,rediect uri 无效或丢失。
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>HTML</title>
</head>
<body>
<a
href="https://api.notion.com/v1/oauth/authorize?client_id=c7d10044-846c-423d-bc66-d6bf7838cc53&redirect_uri=https%3A%2F%2Fnotion-backend-intervue.herokuapp.com%2Fauth%2Fnotion%2Fcallback&response_type=code"
>Add to Notion</a
>
</body>
</html>
为了处理所有进一步的步骤,这是我的后端配置。
app.get("/auth/notion/callback/:code/:state", (req, res) => {
tempCode = req.params.code;
tempState = req.params.state;
console.log(tempCode);
res.send({
"message": "Yes this is the route you are looking for",
"code": tempCode,
"state": tempState
});
axios.post('/https://api.notion.com/v1/oauth/token', {
grant_type: "authorization_code",
code: tempCode,
redirect_uri: 'https://notion-backend-intervue.herokuapp.com/auth/notion/callback/'
}).then((response) => {
console.log(response)
}).catch((err) => {
console.log(`error-->`, err);
})
});
在集成设置中,我提供了此 url 作为 redirect_uri:https://notion-backend-intervue.herokuapp.com/
由于未调用此获取请求(我从 Heroku 日志中确认了这一点)。我想我在提供重定向 URI 时遇到了一些格式问题。请帮助我。
后来我发现这不是与重定向 uri 的格式相关的问题,它是正确的,基于对文档的期望。但是由于某些未知原因,文档中提供的格式将不起作用,可能是 API 在文档之后更新,也可能是由于某些错误。所以,这是解决方案:
在锚标签中,将 href link 更改为:
href="https://api.notion.com/v1/oauth/authorize?client_id=c7d10044-846c-423d-bc66-d6bf7838cc53&response_type=code"
之后,概念服务器将在重定向 uri 中为您提供 link,您在概念集成设置中提供的,在我的例子中是这样的:
https://notion-backend-intervue.herokuapp.com/auth/notion/callback
所以,在后端创建一个路由来捕获该代码,并将带有代码的 post 请求发送到“https://api.notion.com/v1/oauth/token”,然后你将获得访问令牌作为响应。
后端路由如下所示:
app.get("/auth/notion/callback", (req, res) => {
let tempAuthCode = req.query.code;
console.log("Code --> ", tempAuthCode);
axios({
method: "post",
url: "https://api.notion.com/v1/oauth/token",
data: {
"grant_type": "authorization_code",
"code": tempAuthCode,
},
headers: {
"Authorization":`Basic ${encodedToken}`,
"Content-Type": "application/json"
}
}).then((response) => {
console.log(response);
}).catch((err) => {
console.log(err);
});
});
正如您在上面看到的,您还必须从我的 post 请求的数据对象中省略 redirect_uri。
我正在尝试使用 public 与概念 API 的集成,并且严格遵循文档。 Link: https://developers.notion.com/docs/authorization#authorizing-public-integrations
但是对于以下 index.html 我收到错误,rediect uri 无效或丢失。
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>HTML</title>
</head>
<body>
<a
href="https://api.notion.com/v1/oauth/authorize?client_id=c7d10044-846c-423d-bc66-d6bf7838cc53&redirect_uri=https%3A%2F%2Fnotion-backend-intervue.herokuapp.com%2Fauth%2Fnotion%2Fcallback&response_type=code"
>Add to Notion</a
>
</body>
</html>
为了处理所有进一步的步骤,这是我的后端配置。
app.get("/auth/notion/callback/:code/:state", (req, res) => {
tempCode = req.params.code;
tempState = req.params.state;
console.log(tempCode);
res.send({
"message": "Yes this is the route you are looking for",
"code": tempCode,
"state": tempState
});
axios.post('/https://api.notion.com/v1/oauth/token', {
grant_type: "authorization_code",
code: tempCode,
redirect_uri: 'https://notion-backend-intervue.herokuapp.com/auth/notion/callback/'
}).then((response) => {
console.log(response)
}).catch((err) => {
console.log(`error-->`, err);
})
});
在集成设置中,我提供了此 url 作为 redirect_uri:https://notion-backend-intervue.herokuapp.com/
由于未调用此获取请求(我从 Heroku 日志中确认了这一点)。我想我在提供重定向 URI 时遇到了一些格式问题。请帮助我。
后来我发现这不是与重定向 uri 的格式相关的问题,它是正确的,基于对文档的期望。但是由于某些未知原因,文档中提供的格式将不起作用,可能是 API 在文档之后更新,也可能是由于某些错误。所以,这是解决方案:
在锚标签中,将 href link 更改为:
href="https://api.notion.com/v1/oauth/authorize?client_id=c7d10044-846c-423d-bc66-d6bf7838cc53&response_type=code"
之后,概念服务器将在重定向 uri 中为您提供 link,您在概念集成设置中提供的,在我的例子中是这样的:
https://notion-backend-intervue.herokuapp.com/auth/notion/callback
所以,在后端创建一个路由来捕获该代码,并将带有代码的 post 请求发送到“https://api.notion.com/v1/oauth/token”,然后你将获得访问令牌作为响应。
后端路由如下所示:
app.get("/auth/notion/callback", (req, res) => {
let tempAuthCode = req.query.code;
console.log("Code --> ", tempAuthCode);
axios({
method: "post",
url: "https://api.notion.com/v1/oauth/token",
data: {
"grant_type": "authorization_code",
"code": tempAuthCode,
},
headers: {
"Authorization":`Basic ${encodedToken}`,
"Content-Type": "application/json"
}
}).then((response) => {
console.log(response);
}).catch((err) => {
console.log(err);
});
});
正如您在上面看到的,您还必须从我的 post 请求的数据对象中省略 redirect_uri。