위 챗 애플 릿 페이지 차단기 의 예제 코드
수 요 를 추상 적 으로 하 는 것 은 하나의 필터 입 니 다.작은 프로그램 페이지 의 방문 을 여과 하고 조건 에 부합 되 는 통과,조건 에 부합 되 지 않 는 다른 처 리 를 하 는 것 입 니 다.
php 를 사용 한 laravel 프레임 의 동 화 는 laravel 프레임 의 http 미들웨어 를 단번에 연상 시 킬 것 입 니 다.
HTTP 미들웨어 는 프로그램 에 들 어 가 는 HTTP 요청 을 걸 러 내 는 편리 한 메커니즘 을 제공 합 니 다.예 를 들 어 Laravel 은 기본적으로 미들웨어 를 포함 하여 사용자 인증 을 검증 합 니 다.사용자 가 인증 을 거치 지 않 으 면 미들웨어 는 사용자 가 로그 인 페이지 를 안내 합 니 다.그러나 사용자 가 인증 을 통과 하면 미들웨어 는 이 요청 을 계속 진행 할 수 있 습 니 다.물론 인증 을 제외 하고 미들웨어 도 다양한 작업 을 수행 할 수 있 습 니 다.CORS 미들웨어 는 프로그램 을 떠 날 모든 응답 을 대신 하여 적당 한 응답 헤드 를 추가 하고 로그 미들웨어 는 프로그램 에 들 어 오 는 모든 요청 을 기록 할 수 있 습 니 다.
걱정 스 러 운 것 은 위 챗 애플 릿 이 페이지 인 스 턴 스 를 위 한 미들웨어 체 제 를 제공 하지 않 았 다 는 점 이다.그래서 페이지 실례 의 생명주기 부터 시작 할 수 밖 에 없다.
onLoad 에 대해 서 는 한 페이지 가 한 번 만 호출 됩 니 다.onShow 에 대해 서 는 페이지 를 열 때마다 한 번 씩 호출 합 니 다.
onLoad 나 onShow 갈고리 함수 에서 사용자 의 신분 을 검사 하고 통과 한 후에 이 페이지 에 필요 한 데 이 터 를 끌 어 옵 니 다.그렇지 않 으 면 로그 인 페이지 로 이동 합 니 다.
//orderDetail.js
onShow: function () {
let that = this;
//
service.identityCheck(() => {
//
wx.redirectTo({
url: "/pages/common/login/login"
});
}, () => {
//
that.getDetail(this.orderId);
...
}
);
},
하지만 페이지 마다 이렇게 써 야 합 니 다.중복 코드 가 많 고 침입 성도 강 합 니 다.장식 함수 로 포장 하 는 것 이 좋 습 니 다.
//filter.js
function identityFilter(pageObj){
if(pageObj.onShow){
let _onShow = pageObj.onShow;
pageObj.onShow = function(){
service.identityCheck(()=>{
//
wx.redirectTo({
url: "/pages/common/login/login"
});
},()=>{
// , this
let currentInstance = getPageInstance();
_onShow.call(currentInstance);
});
}
}
return pageObj;
}
function getPageInstance(){
var pages = getCurrentPages();
return pages[pages.length - 1];
}
exports.identityFilter = identityFilter;
filter.js
필 터 를 제공 하 는 방법 으로 기 존의 사용자 신분 차단 을 제외 하고 나중에 다른 차단 이 필요 하면 이 파일 에 추가 할 수 있 습 니 다.그리고 사용자 신분 차단 이 필요 한 애플 릿 페이지 코드 에서filter.identityFilter
로 처리 하면 됩 니 다.
//orderDetail.js
let filter = require('filter.js');
Page(filter.identityFilter({
...
onShow: function () {
//
this.getDetail(this.orderId);
//...
},
...
}));
Promise 로 최적화위의 구현 에 서 는 페이지 를 방문 할 때마다 사용자 의 신분 을 가 져 오 는 방법 을 한 번 씩 실행 합 니 다(바로 위의 코드 에 있 는 service.idenity Check).사실 필요 없어 요.애플 릿 이 시 작 될 때 한 번 만 가 져 오 면 돼 요.app.js 의 onLaunch 방법 에 넣 어 실행 하 는 것 이다.
모든 애플 릿 페이지 가 예화 되 었 을 때,일반적으로 비동기 적 인 방법 을 실행 하여 페이지 에 필요 한 데 이 터 를 가 져 옵 니 다.문 제 는 페이지 의 비동기 방법 이 사용자 신분 을 가 져 오 는 비동기 요청 후에 실행 되 어야 한 다 는 것 을 보증 해 야 한 다 는 것 이다.
Promise 는 비동기 요청 의 실행 순 서 를 가장 잘 처리 한 다 는 것 은 의심 할 여지 가 없다.주인님,빨리 코드 를 넣 으 세 요.
//app.js
App({
onLaunch:function(){
let p = new Promise(function(resolve,reject){
service.identityCheck(resolve,reject);
});
this.globalData.promise = p;
},
...
globalData: {
promise:null,
}
});
//filter.js
const appData = getApp().globalData;
function identityFilter(pageObj){
if(pageObj.onShow){
let _onShow = pageObj.onShow;
pageObj.onShow = function(){
//
appData.promise.then(()=>{
//
wx.redirectTo({
url: "/pages/common/login/login"
});
},()=>{
// , this
let currentInstance = getPageInstance();
_onShow.call(currentInstance);
});
}
}
return pageObj;
}
작은 매듭기본적으로 애플 릿 페이지 의 사용자 신분 차단 기 를 실현 하 였 으 나,laravel 의 http 미들웨어 보다 약간 뒤떨어진다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
OpenSSL 생 성 ssl 인증서텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.