Понятие API OAuth не работает `недопустимый клиент`

#node.js #oauth-2.0 #oauth #notion-api

#node.js #oauth-2.0 #oauth #notion-api

Вопрос:

Я попытался настроить Notion OAuth, и в postman все работает нормально, но в моем приложении это не так.

Я перепробовал много способов, и это последняя реализация, которую я сделал до сих пор.

 router
.get("/notion/authorize", async (req : Request, res: Response) => { 
    let redirectURL = `${process.env.NOTION_AUTH_URL}?owner=useramp;client_id=${process.env.NOTION_CLIENT_ID}amp;response_type=codeamp;redirect_uri=${encodeURI(process.env.NOTION_REDIRECT_URI)}`
    res.redirect(redirectURL)
})
.get("/notion/callback", async (req: Request<any,any, any, {code : string } >, res: Response) => {
    try {
        const {code} = req.query;
        console.log(code)
        if(!code) {
            throw new Error("Code is required from notion")
        }
        const response = await axios.post('https://api.notion.com/v1/oauth/token', { 
            data:JSON.stringify({
                "grant_type":"authorization_code",
                "code":code,
                "redirect_uri": "http://localhost:9000/notion/callback"
            }),
            headers: {
            "Authorization": `Basic ${Buffer.from(`${process.env.NOTION_CLIENT_ID}:${process.env.NOTION_CLIENT_SECRET}`).toString('base64')}`,
            "Content-Type": "application/json",
            }
        
        })
        const  {access_token, bot_id, workspace_id, workspace_name} =response.data;
        
        //.. more code

    }catch(err) {
        if(axios.isAxiosError(err)) {
            console.log(err.response.data, err.response.status)
        }
        return res.status(400).json({message: `Failed to register user ${err}`})
    }

    
})
 

Все еще я получаю это как ошибку { error: 'invalid_client' } 401

Также да, проверил ключи и перенаправил URI.

Пожалуйста, помогите мне с этим 🙂

Ответ №1:

Похоже, ваш заголовок неверен. Проверьте, дает ли поле авторизации то же значение, что и то, которое вы используете в postman.

Другое дело — ваш запрос post. Я думаю, вы что-то путаете. Axios может принимать один единственный объект при использовании метода запроса или 3 параметра (url, data, config) при использовании метода post (Документация Axios). В вашем коде данные и заголовки находятся вместе и должны быть разделены в разных объектах.

Комментарии:

1. Да, вы правы! Это работает, большое вам спасибо.