mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-05-14 15:09:22 +00:00
102 lines
2.4 KiB
JavaScript
102 lines
2.4 KiB
JavaScript
// pages/sitemap.xml.js
|
|
import { getGlobalData } from '@/lib/db/getSiteData'
|
|
import axios from 'axios'
|
|
import { useRouter } from 'next/router'
|
|
import { useEffect } from 'react'
|
|
import Slug from '../[prefix]'
|
|
|
|
/**
|
|
* 根据notion的slug访问页面
|
|
* 解析二级目录 /article/about
|
|
* @param {*} props
|
|
* @returns
|
|
*/
|
|
const UI = props => {
|
|
const { redirect_pathname, redirect_query } = props
|
|
const router = useRouter()
|
|
useEffect(() => {
|
|
router?.push({ pathname: redirect_pathname, query: redirect_query })
|
|
}, [])
|
|
return <Slug {...props} />
|
|
}
|
|
|
|
/**
|
|
* 服务端接收参数处理
|
|
* @param {*} ctx
|
|
* @returns
|
|
*/
|
|
export const getServerSideProps = async ctx => {
|
|
const from = `auth`
|
|
const props = await getGlobalData({ from })
|
|
delete props.allPages
|
|
const code = ctx.query.code
|
|
|
|
let params = null
|
|
if (code) {
|
|
params = await fetchToken(code)
|
|
}
|
|
|
|
// 授权成功的划保存下用户的workspace信息
|
|
if (params?.status === 200) {
|
|
console.log('请求成功', params)
|
|
props.redirect_query = {
|
|
...params.data,
|
|
msg: '成功了' + JSON.stringify(params.data)
|
|
}
|
|
console.log('用户信息', JSON.stringify(params.data))
|
|
} else if (!params) {
|
|
console.log('请求异常', params)
|
|
props.redirect_query = { msg: '无效请求' }
|
|
} else {
|
|
console.log('请求失败', params)
|
|
props.redirect_query = { msg: params.statusText }
|
|
}
|
|
|
|
props.redirect_pathname = '/auth/result'
|
|
|
|
return {
|
|
props
|
|
}
|
|
}
|
|
|
|
const fetchToken = async code => {
|
|
if (!code) {
|
|
return '无效请求'
|
|
}
|
|
console.log('Auth', code)
|
|
const clientId = process.env.OAUTH_CLIENT_ID
|
|
const clientSecret = process.env.OAUTH_CLIENT_SECRET
|
|
const redirectUri = process.env.OAUTH_REDIRECT_URI
|
|
|
|
// encode in base 64
|
|
const encoded = Buffer.from(`${clientId}:${clientSecret}`).toString('base64')
|
|
|
|
try {
|
|
console.log(
|
|
`请求Code换取Token ${clientId}:${clientSecret} -- ${redirectUri}`
|
|
)
|
|
const response = await axios.post(
|
|
'https://api.notion.com/v1/oauth/token',
|
|
{
|
|
grant_type: 'authorization_code',
|
|
code: code,
|
|
redirect_uri: redirectUri
|
|
},
|
|
{
|
|
headers: {
|
|
Accept: 'application/json',
|
|
'Content-Type': 'application/json',
|
|
Authorization: `Basic ${encoded}`
|
|
}
|
|
}
|
|
)
|
|
|
|
console.log('Token response', response.data)
|
|
return response
|
|
} catch (error) {
|
|
console.error('Error fetching token', error)
|
|
}
|
|
}
|
|
|
|
export default UI
|