feat(home): 实现游客模式与登录流程优化
- 添加游客模式,展示公共内容无需强制登录 - 实现游客模块展示打卡、计划、关于我们等功能介绍 - 添加产品介绍页面显示学习成长工具详情 - 优化登录流程,添加用户协议和隐私政策同意选项 - 更新角色标签将老师改为管理员,学员改为成员 - 添加注销账号功能替代退出登录 - 实现webview页面域名白名单安全验证 - 添加隐私政策和用户协议页面 - 优化页面跳转逻辑和错误提示信息 - 统一项目名称从明缘进阶场改为明缘云道场
This commit is contained in:
@@ -1,8 +1,47 @@
|
||||
const api = require('../../utils/api');
|
||||
|
||||
// 允许加载的域名白名单
|
||||
const ALLOWED_HOSTS = ['m.muguaclub.cn', 'muguaclub.cn'];
|
||||
|
||||
function isAllowedUrl(url) {
|
||||
if (!url) return false;
|
||||
try {
|
||||
// 简单解析 hostname
|
||||
const match = url.match(/^https?:\/\/([^/:?#]+)/i);
|
||||
if (!match) return false;
|
||||
const host = match[1].toLowerCase();
|
||||
return ALLOWED_HOSTS.some((h) => host === h || host.endsWith('.' + h));
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Page({
|
||||
data: { url: '' },
|
||||
data: {
|
||||
url: '',
|
||||
invalid: false
|
||||
},
|
||||
onLoad(options) {
|
||||
if (options.url) {
|
||||
this.setData({ url: decodeURIComponent(options.url) });
|
||||
if (!options.url) {
|
||||
this.setData({ invalid: true });
|
||||
return;
|
||||
}
|
||||
const url = decodeURIComponent(options.url);
|
||||
if (!isAllowedUrl(url)) {
|
||||
console.warn('[webview] blocked url:', url);
|
||||
this.setData({ invalid: true, url: '' });
|
||||
return;
|
||||
}
|
||||
this.setData({ url, invalid: false });
|
||||
},
|
||||
|
||||
onRetry() {
|
||||
if (this.data.url) {
|
||||
// 触发重新加载
|
||||
this.setData({ url: '' });
|
||||
setTimeout(() => {
|
||||
this.setData({ url: this.data._url || '' });
|
||||
}, 50);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user