如何移除预览模式功能?实现未登录用户查看完整出版物
解决方案:让未登录用户查看完整出版物内容
根据你提供的代码和问题描述,只删除前端isPreviewMode相关代码无效的核心原因是:前端的预览状态和内容完整性完全由后端接口返回的数据决定。以下是具体修改方案:
一、前端快速修复(无需改动后端即可生效)
如果需要快速让前端展示完整内容,可以强制覆盖后端返回的预览状态:
- 强制关闭预览模式
找到getPublicationDetail函数,修改isPreviewMode的赋值逻辑,不管后端返回什么都设为false:
const getPublicationDetail = async () => { let param = '/' + queryKey[3]; try { await fetchRequest({ method: 'GET', path: 'info' + param }).then( (response) => { setCategoryList(response.categories || []); setQuickLinkList(response.quickLinks || []); const responseData = response.data || {}; setPublicationData(responseData); // 强制关闭预览模式,忽略后端返回值 setIsPreviewMode(false); } ); } catch (error) { console.log(error); } };
- 移除预览遮罩和登录引导按钮
直接删除return语句中{isPreviewMode && (...)}这段代码,也就是以下部分:
{isPreviewMode && ( <> <Box w={{ md: 'calc(60% - 100px)', base: '100%' }} position="absolute" marginTop="-150px" display="block" height="150px" backgroundImage="linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.9) 100%)" /> <Center> <CustomButton text="BACA SELENGKAPNYA" variant="transparent" icon="none" w="" onClick={() => navigate(AUTH + LOGIN)} /> </Center> </> )}
二、后端核心修改(彻底解决问题)
前端修改只是临时方案,真正的问题根源在后端接口。你需要找到处理GET /info/${param}的后端代码,完成以下修改:
- 移除判断用户登录状态的逻辑,不再根据登录状态截断出版物内容
- 确保接口返回的
data.content是完整的出版物文本 - 强制将返回的
isPreviewMode字段设为false
三、可选:开放下载功能给未登录用户
如果客户同时需要未登录用户也能下载出版物,可以移除下载按钮的登录校验:
将右侧栏中的:
{loginInfo.isLogin && ( <CustomButton w="100%" text="UNDUH" icon="download" variant="white" onClick={handleButtonClick} /> )}
改为:
<CustomButton w="100%" text="UNDUH" icon="download" variant="white" onClick={handleButtonClick} />
同时需要检查后端info/download接口是否有登录校验,若有则同步移除。
内容的提问来源于stack exchange,提问作者Estherak23
相关产品推荐
相关产品推荐

