我正在构建一个Next JS应用程序,该应用程序通过Auth0登录Github,并使用Octokit获取用户信息/转发。
为了获得IDP,我不得不在auth0中设置一个管理api。https://community.auth0.com/t/can-i-get-the-github-access-token/47237我在NodeJs服务器中设置了它,以将管理api令牌隐藏为:GET/getaccesstoken endpoint
在客户端:/chooserepo页面上,我有以下代码:
const chooserepo = (props) => {
const octokit = new Octokit({
auth: props.accessToken,
});
async function run() {
const res = await octokit.request("GET /user");
console.log("authenticated as ", res.data);
}
run();
和
export const getServerSideProps = withPageAuthRequired({
async getServerSideProps({ req, params }) {
let { user } = getSession(req);
console.log("user from get session ", user);
let url = "http://localhost:4000/getaccesstoken/" + user.sub;
let data = await fetch(url);
let resData = await data.text();
return {
props: { accessToken: resData }, // will be passed to the page component as props
};
},
});
然而,我不断得到坏凭据错误。如果我直接把访问令牌放在Octokit中,它似乎工作得很好,但当它从服务器获取访问令牌时就不工作了。
看起来Octokit实例是在发送服务器端道具之前创建的。我该如何修复它?
我通过比较硬编码和从服务器获取访问令牌时请求头之间的差异来发现错误。事实证明,引号和反斜杠需要被替换(并且在控制台日志记录时不可见(