Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
CoCo_Code_Op2
next.js
提交
6739ea39
N
next.js
项目概览
CoCo_Code_Op2
/
next.js
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
N
next.js
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
6739ea39
编写于
5月 02, 2020
作者:
P
Piyush
提交者:
GitHub
5月 02, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix preview mode expiration duration (#12118)
上级
a7bd2db9
变更
3
显示空白变更内容
内联
并排
Showing
3 changed file
with
39 addition
and
8 deletion
+39
-8
packages/next/next-server/server/api-utils.ts
packages/next/next-server/server/api-utils.ts
+11
-7
test/integration/prerender-preview/pages/api/preview.js
test/integration/prerender-preview/pages/api/preview.js
+8
-1
test/integration/prerender-preview/test/index.test.js
test/integration/prerender-preview/test/index.test.js
+20
-0
未找到文件。
packages/next/next-server/server/api-utils.ts
浏览文件 @
6739ea39
...
...
@@ -298,12 +298,14 @@ export function tryGetPreviewData(
const
tokenPreviewData
=
cookies
[
COOKIE_NAME_PRERENDER_DATA
]
const
jsonwebtoken
=
require
(
'
next/dist/compiled/jsonwebtoken
'
)
as
typeof
import
(
'
jsonwebtoken
'
)
let
encryptedPreviewData
:
string
let
encryptedPreviewData
:
{
data
:
string
}
try
{
encryptedPreviewData
=
jsonwebtoken
.
verify
(
tokenPreviewData
,
options
.
previewModeSigningKey
)
as
string
)
as
typeof
encryptedPreviewData
}
catch
{
// TODO: warn
clearPreviewData
(
res
as
NextApiResponse
)
...
...
@@ -312,7 +314,7 @@ export function tryGetPreviewData(
const
decryptedPreviewData
=
decryptWithSecret
(
Buffer
.
from
(
options
.
previewModeEncryptionKey
),
encryptedPreviewData
encryptedPreviewData
.
data
)
try
{
...
...
@@ -358,10 +360,12 @@ function setPreviewData<T>(
const
jsonwebtoken
=
require
(
'
next/dist/compiled/jsonwebtoken
'
)
as
typeof
import
(
'
jsonwebtoken
'
)
const
payload
=
jsonwebtoken
.
sign
(
encryptWithSecret
(
{
data
:
encryptWithSecret
(
Buffer
.
from
(
options
.
previewModeEncryptionKey
),
JSON
.
stringify
(
data
)
),
},
options
.
previewModeSigningKey
,
{
algorithm
:
'
HS256
'
,
...
...
test/integration/prerender-preview/pages/api/preview.js
浏览文件 @
6739ea39
...
...
@@ -6,7 +6,14 @@ export default (req, res) => {
return
res
.
status
(
500
).
end
(
'
too big
'
)
}
}
else
{
res
.
setPreviewData
(
req
.
query
)
res
.
setPreviewData
(
req
.
query
,
req
.
query
.
cookieMaxAge
?
{
maxAge
:
req
.
query
.
cookieMaxAge
,
}
:
undefined
)
}
res
.
status
(
200
).
end
()
...
...
test/integration/prerender-preview/test/index.test.js
浏览文件 @
6739ea39
...
...
@@ -93,6 +93,26 @@ function runTests(startServer = nextStart) {
cookie
.
serialize
(
'
__next_preview_data
'
,
cookies
[
1
].
__next_preview_data
)
})
it
(
'
should expire cookies with a maxAge
'
,
async
()
=>
{
const
expiry
=
'
60
'
const
res
=
await
fetchViaHTTP
(
appPort
,
'
/api/preview
'
,
{
cookieMaxAge
:
expiry
,
})
expect
(
res
.
status
).
toBe
(
200
)
const
originalCookies
=
res
.
headers
.
get
(
'
set-cookie
'
).
split
(
'
,
'
)
const
cookies
=
originalCookies
.
map
(
cookie
.
parse
)
expect
(
originalCookies
.
every
(
c
=>
c
.
includes
(
'
; Secure;
'
)))
expect
(
cookies
.
length
).
toBe
(
2
)
expect
(
cookies
[
0
]).
toMatchObject
({
Path
:
'
/
'
,
SameSite
:
'
None
'
})
expect
(
cookies
[
0
]).
toHaveProperty
(
'
__prerender_bypass
'
)
expect
(
cookies
[
0
][
'
Max-Age
'
]).
toBe
(
expiry
)
expect
(
cookies
[
1
]).
toMatchObject
({
Path
:
'
/
'
,
SameSite
:
'
None
'
})
expect
(
cookies
[
1
]).
toHaveProperty
(
'
__next_preview_data
'
)
expect
(
cookies
[
1
][
'
Max-Age
'
]).
toBe
(
expiry
)
})
it
(
'
should not return fallback page on preview request
'
,
async
()
=>
{
const
res
=
await
fetchViaHTTP
(
appPort
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录