亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

vue項(xiàng)目中微信登錄的實(shí)現(xiàn)操作

瀏覽:93日期:2022-06-11 16:10:41

1、下載組件 wxlogin

npm install vue-wxlogin --save

2、引入組件,給組件傳參

3、重定向的url應(yīng)該是微信登錄官網(wǎng)中的微信授權(quán)作用域

4、如果url里面有端口號(hào),微信授權(quán)作用里面也要有

5、重定向的url:需要在http://tool.chinaz.com/tools/urlencode.aspx中轉(zhuǎn)碼

6、微信登錄成功后,會(huì)自動(dòng)重定向到新地址,此時(shí)的地址欄中就有code參數(shù)

7、如果報(bào)錯(cuò)說(shuō)不能從組件跳到頁(yè)面,那就找到wxlogin組件里面的iframe標(biāo)簽,加上這個(gè)屬性:sandbox=“allow-scripts allow-top-navigation allow-same-origin”

報(bào)錯(cuò)內(nèi)容:

qrconnect?scope=snsapi_login&redirect_uri=http%3a%2f%2f%2f&state=&login_type=jssdk&self_redirect=false&style=black&href=:84 Unsafe JavaScript attempt to initiate navigation for frame with origin ’http://localhost:9020’ from frame with URL ’https://open.weixin.qq.com/connect/qrconnect?app&scope=snsapi_login&redirect_uri=http%3a%2f%2f&state=&login_type=jssdk&self_redirect=false&style=black&href=’. The frame attempting navigation is targeting its top-level window, but is neither same-origin with its target nor has it received a user gesture. See https://www.chromestatus.com/features/5851021045661696.```

補(bǔ)充知識(shí):vue移動(dòng)端微信授權(quán)登錄插件封裝

1.新建wechatAuth.js文件

const qs = require(’qs’)//應(yīng)用授權(quán)作用域,snsapi_base (不彈出授權(quán)頁(yè)面,直接跳轉(zhuǎn),只能獲取用戶(hù)openid),snsapi_userinfo (彈出授權(quán)頁(yè)面,可通過(guò)openid拿到昵稱(chēng)、性別、所在地。并且,即使在未關(guān)注的情況下,只要用戶(hù)授權(quán),也能獲取其信息)const SCOPES = [’snsapi_base’, ’snsapi_userinfo’]class VueWechatAuthPlugin { constructor () { this.appid = null this.redirect_uri = null this.scope = SCOPES[1] this._code = null this._redirect_uri = null } install (Vue, options) { let wechatAuth = this this.setAppId(options.appid) Vue.mixin({ created: function () { this.$wechatAuth = wechatAuth }, }) } static makeState () { return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15) } setAppId (appid) { this.appid = appid } set redirect_uri (redirect_uri) { this._redirect_uri = encodeURIComponent(redirect_uri) } get redirect_uri () { return this._redirect_uri } get state () { return localStorage.getItem(’wechat_auth:state’) } set state (state) { localStorage.setItem(’wechat_auth:state’, state) } get authUrl () { if (this.appid === null) { throw ’appid must not be null’ } if (this.redirect_uri === null) { throw ’redirect uri must not be null’ } this.state = VueWechatAuthPlugin.makeState() return `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${this.appid}&redirect_uri=${this.redirect_uri}&response_type=code&scope=${this.scope}&state=${this.state}#wechat_redirect` } returnFromWechat (redirect_uri) { let parsedUrl = qs.parse(redirect_uri.split(’?’)[1]) if (process.env.NODE_ENV === ’development’) { // console.log(’parsedUrl: ’, parsedUrl) this.state = null this._code = parsedUrl.code } else { if (this.state === null) { throw ’You did’t set state’ } if (parsedUrl.state === this.state) { this.state = null this._code = parsedUrl.code } else { this.state = null throw `Wrong state: ${parsedUrl.state}` } } } get code () { if (this._code === null) { throw ’Not get the code from wechat server!’ } // console.log(this) // console.log(’this._code: ’ + this._code) let code = this._code this._code = null // console.log(’code: ’ + code) return code }}const vueWechatAuthPlugin = new VueWechatAuthPlugin()if (typeof window !== ’undefined’ && window.Vue) { window.Vue.use(VueWechatAuthPlugin)}export default vueWechatAuthPlugin

2.main.js中導(dǎo)入

import wechatAuth from ’./plugins/wechatAuth’//微信登錄插件const qs= require(’qs’);Vue.use(wechatAuth, {appid: XXXXXXXXX});

3.路由鉤子中可以進(jìn)行相關(guān)操作

router.beforeEach((to, from, next) => { if (store.state.loginStatus == 0) { //微信未授權(quán)登錄跳轉(zhuǎn)到授權(quán)登錄頁(yè)面 let url = window.location.href; //解決重復(fù)登錄url添加重復(fù)的code與state問(wèn)題 let parseUrl = qs.parse(url.split(’?’)[1]); let loginUrl; if (parseUrl.code && parseUrl.state) { delete parseUrl.code; delete parseUrl.state; loginUrl = `${url.split(’?’)[0]}?${qs.stringify(parseUrl)}`; } else { loginUrl = url; } wechatAuth.redirect_uri = loginUrl; store.dispatch(’setLoginStatus’, 1); window.location.href = wechatAuth.authUrl } else if (store.state.loginStatus == 1) { try { wechatAuth.returnFromWechat(to.fullPath); } catch (err) { store.dispatch(’setLoginStatus’, 0) next() } store.dispatch(’loginWechatAuth’, wechatAuth.code).then((res) => { if (res.status == 1) { store.dispatch(’setLoginStatus’, 2) } else { store.dispatch(’setLoginStatus’, 0) } next() }).catch((err) => { next() }) }else { next() }});

2018.8.31更新

更新微信授權(quán)登錄vue-cli 3.x與2.x的demo vue-wechat-login,查看對(duì)應(yīng)分支即可。

2019.7.23更新

代碼進(jìn)行了相關(guān)重構(gòu) vue-wechat-login

以上這篇vue項(xiàng)目中微信登錄的實(shí)現(xiàn)操作就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: 微信
相關(guān)文章:
主站蜘蛛池模板: 亚洲高清成人欧美动作片 | 日韩不卡在线 | 国产精品漂亮美女在线观看 | 国产好大好爽久久久久久久 | a级情欲视频免费观看 | 免费香蕉视频 | 亚洲精品国产福利在线观看 | 亚洲欧美精品伊人久久 | 久久综合久久综合久久综合 | 黄色网页在线免费观看 | 一级成人 理伦片 | 国产伦精品一区二区三区视频小说 | 金发美女与黑人巨大交 | 亚洲高清日韩精品第一区 | 中文字幕专区在线亚洲 | 激情影院在线视频永久观看 | 国产精品一区二区三 | 91精品在线播放 | 青青青青啪视频在线观看 | 一级毛片视频 | 视频一区在线免费观看 | 91免费短视频 | 欧美视频一区二区三区 | 日韩欧美特级毛片 | 中文字幕在线观看第一页 | 777成了人乱视频 | 日本一级毛片无遮挡 | 亚洲丝袜第一页 | www亚洲一区 | 久久人人爽人人爽人人片av不 | 国产农村乱色xxxx | 久操久热| 真实国产乱子伦精品一区二区三区 | 13一14周岁毛片免费 | 性一级视频 | 国产精品99爱免费视频 | 一级不卡毛片 | 岛国片欧美一级毛片 | 香蕉视频在线观看网址 | 国内一区 | 久久精品三级 |