상세 설명 Vue 위 챗 공중 번호 개발 구덩이 밟 기 전 기록
수요
인증 로그 인
권한 수여 절 차 는 다음 과 같다.
상세 설명:
사용자 가 사이트 의 메 인 도 메 인 이름 을 방문 하 다.
다음은 오류 권한 수여 방안 입 니 다.
이 방안 은 왜 틀 렸 습 니까?사실 권한 수여 로그 인 만 실현 하면 이 방안 은 가능 하고 뚜렷 하 다.vue 클 라 이언 트 는 일방적으로 서버 와 위 챗 서버 간 에 통신 을 하고 위 챗 서버 는 서버 와 직접 통신 할 수 없다.이 방안 의 구 덩이 는 위 챗 이 리 셋 권한 을 수 여 받 았 을 때 code 인 자 를 가지 고 있 습 니 다.이 인 자 는 vue 경로 가 오염 되 어 ios 에서 JS-SDK 서명 을 할 때 실 패 했 습 니 다(추 후 이 문 제 를 구체 적 으로 설명 합 니 다).
JS-SDK 서명
사인 에 대해 서 는 공식 적 으로 이렇게 말 합 니 다.
JS-SDK 를 사용 해 야 하 는 모든 페이지 는 설정 정 보 를 먼저 입력 해 야 합 니 다.그렇지 않 으 면 호출 할 수 없습니다.(같은 url 은 한 번 만 호출 하면 됩 니 다.url 이 변 하 는 SPA 의 웹 app 은 url 이 변 할 때마다 호출 할 수 있 습 니 다.
vue 에서 루트 는 history 와 hash 두 가지 모드 가 있 습 니 다.history 모드 에서 이상 적 인 디자인 방안 은 JS-SDK 구성 요 소 를 사용 해 야 할 때 다음 과 같은 현재 url(즉,location.href.split('\#')[0]을 통 해 얻 은 주소)을 서버 에 전달 하여 서명 하면 문제 가 없 을 것 입 니 다.그러나 IOS 에서 얻 은 url 은 위 챗 js 를 호출 할 때 있 는 페이지 의 주소 가 아 닙 니 다.사이트 첫 페이지 에 들 어 가 는 주소 입 니 다.
인터넷 에서 조회 한 방안 은 ios 장치 가 페이지 에 들 어 갈 때 현재 url 을 기록 하고 권한 수여 페이지 에 기 록 된 url 을 서버 에 전달 하여 서명 하 는 것 입 니 다.이 방안 은 실천 을 통 해 가능 하 다.엄 마 는 더 이상 나의 인터넷 주소 가 매우 추 하고 보기 흉 하 다 는 것 을 걱정 하지 않 아 도 된다.
또 다른 방안 은 hash 모드 를 사용 하 는 것 입 니 다.이 모드 에서 url 은 항상 주 도 메 인 주소 일 뿐 url 을 전달 하 는 고민 을 줄 이 고 호 환 을 처리 할 필요 가 없습니다.따라서 경로 에\#가 있 는 것 을 권장 하지 않 는 다 면 이 방안 은 최 우선 방안 이 어야 합 니 다.
여기 또 하나의 깊 은 구덩이 가 있 습 니 다.만약 에 권한 수여 방안 이 상기 vue 클 라 이언 트 가 리 셋 을 처리 하 는 방식 을 채택 하면 ios 는 영원히 서명 에 성공 하지 못 할 것 입 니 다.왜 냐 면 이런 방안 의 길 은 보통 이 렇 기 때 문 입 니 다.
http://domain.com/?code=xxxxxx&stat=#/xxx
이 경로 에 인자 가 있 는 url 은 서명 검사 에 성공 할 수 없습니다!이 경로 에 인자 가 있 는 url 은 서명 검사 에 성공 할 수 없습니다!
이 경로 에 인자 가 있 는 url 은 서명 검사 에 성공 할 수 없습니다!
중요 한 얘 기 는 세 번 해 야 지.
Coding
코드 에 맞지 않 는 어떠한 협박 도 깡패 짓 이다.여기 서 필 자 는 vue 에서 구체 적 으로 어떻게 coding 하 는 지 공유 했다.
위 챗 인증 로그 인
필 자 는 프로젝트 에 사 용 된 vue-router 를 사용 하여 경로 통 제 를 하고 vuex 를 사용 하여 사용자 로그 인 정 보 를 기록 하 였 으 나 vuex 에 저 장 된 내용 은 페이지 가 새로 고침 되면 잃 어 버 릴 수 있 기 때문에 서버 에서 사용자 로그 인 상 태 를 쿠키 에 적 었 습 니 다.vue 에서 이 두 가지 항목 을 통 해 로그 인 판단 을 해 야 합 니 다.BB 가 많 지 않 으 니 코드 를 직접 보 세 요.
// ... other code
router.beforeEach((to, from, next) => {
if ((!VueCookie.get('user') && !store.state.userInfo)) {
//
console.log(' ')
// ,
axios.post('/api/login').then(res => {
var data = res.data
if (data.code === 100) {
window.location.href = data.data
}
})
} else if (!store.state.userInfo) {
// , vuex
axios.get('/api/currentuser').then(res => {
if (res.data.code === 100) {
store.dispatch('setUserInfo', res.data.data)
next()
}
})
console.log('cookie ')
next()
} else {
//
console.log(' ')
next()
}
})
//... other code
history 모드 의 JS-SDK 서명입구 파일 에 현재 url 을 vuex 에 저장 합 니 다.
// ... other code
router.beforeEach((to, from, next) => {
document.title = to.meta.title
// jssdk , history
if (!store.state.url) {
store.commit('setUrl', document.URL)
}
// ... other code
서명 을 가 져 올 구성 요소 에서 가 져 오고 설정 합 니 다.
// ... other code
created () {
var sef = this
var url = ''
// ios
if (window.__wxjs_is_wkwebview === true) {
url = this.$store.state.url.split('#')[0]
} else {
url = window.location.href.split('#')[0]
}
this.$http.get('/api/jssdk?url=' + url).then(function (res) {
sef.lists = res.data.data
hmTools.wechact(sef.lists, sef) //js-sdk
})
}
// ...other code
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vue Render 함수로 DOM 노드 코드 인스턴스 만들기render에서createElement 함수를 사용하여 DOM 노드를 만드는 것은 직관적이지 않지만 일부 독립 구성 요소의 디자인에서 특수한 수요를 충족시킬 수 있습니다.간단한 렌더링 예는 다음과 같습니다. 또한 v...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.