博客原来配置了两个域名:imyoyo.xyz
,www.imyoyo.xyz
。两个域名均配置了腾讯云CDN动静加速
,导致CDN服务器有时候会缓一些请求
(不是静态资源),需要手动去控制它刷新缓存,才能得到最新的内容。非常麻烦,于是我重新弄了一个域名preview.imyoyo.xyz
用于自己使用,做了鉴权处理。
鉴权处理
为什么要鉴权处理?
答:如果每个人都去访问
preview.imyoyo.xyz
,那么服务器的压力很大,CDN加速形同虚设。再说,preview.imyoyo.xyz
是用于我增加新功能,或者写文章,能够及时查看效果的。所以针对该域名增加鉴权。
在home模块的base controller中,做一些身份验证,如果后端没有session(存储用户信息),跳转到登录模块。后端保存session,同时给域名注入cookie。
同时要针对域名进行判断,为什么是preview.imyoyo.xyz
就触发鉴权逻辑。这里在后台进行了配置。
鉴权逻辑代码:
let referrer = this.ctx.request.origin;
if (think.isSameOrigin(referrer, preview_url) && !isDev) {
let userInfo = (await this.session('userInfo')) || {};
if (think.isEmpty(userInfo)) {
return this.redirect('/admin/login');
}
this.userInfo = userInfo;
if (!this.isAjax()) {
this.assign('userInfo', { id: userInfo.id, name: userInfo.name, type: userInfo.type });
}
}
判断是否同源:
isSameOrigin(referrer, site_url) {
if (!referrer || !site_url) {
return false;
}
let siteUrlHost = parse(site_url).host;
let referrerHost = parse(referrer).host;
if (!siteUrlHost || !referrerHost) {
return false;
}
if (siteUrlHost.length < referrerHost.length) {
if (referrerHost.slice(-siteUrlHost.length) !== siteUrlHost) {
return false;
}
} else if (siteUrlHost.slice(-referrerHost.length) !== referrerHost) {
return false;
}
return true;
},
Comments