当前位置: 首页 > news >正文

国内气膜馆建造商seo怎么收费seo

国内气膜馆建造商,seo怎么收费seo,做视频课程的网站有哪些,银川网站建设0951目录 引入 流程介绍 具体实现 引入 本文主要讲解网站应用中微信登录的具体流程是怎么样的,以及作为前端开发人员在这整个流程中的主要任务是什么。 如果想要实现微信登录的功能,需要开发人员到微信开放平台注册相应的账号,进行注册应用&am…

目录

引入

流程介绍

具体实现


引入

本文主要讲解网站应用中微信登录的具体流程是怎么样的,以及作为前端开发人员在这整个流程中的主要任务是什么。

如果想要实现微信登录的功能,需要开发人员到微信开放平台注册相应的账号,进行注册应用(需要300¥),获取相应的id和密钥,以及进行设置授权的回调域。在此过程中涉及到了,微信用户,第三方应用,以及微信开放平台。现在以开发人员的角度来详细地介绍实现微信登录的整个流程:

流程介绍

1️⃣前端开发人员需要引入微信提供生成二维码的核心插件。这时候可以到官方提供的文档中就行查看。然后编写生成二维码的代码,这部分的代码同样在官方的文档里面有提供,这部分的代码功能主要是用户点击登录按钮之后,会向微信的服务器发一个请求,请求成功之后微信服务器会向前端页面返回一张微信登录二维码的图片。

2️⃣二维码生成之后微信服务器会进行使用长轮询会问用户是否授权了,若用户授权成功,则微信服务器就会向我们项目的后台服务器发送一个用户授权成功的唯一标识code。

3️⃣若后台收到了code,则后台会向微信的服务器发送请求带上code+appid+secret,然后微信服务器会向后台服务器返回access_token。

4️⃣后台获取到access_token之后再向微信的服务器通过snaspi_uerinfo请求地址携带获取到的token发请求,微信服务器则返回相应的用户信息。

5️⃣然后后台服务器获取到用户信息之后,会进行重定向到前端的某一个页面,通过query参数将用户信息注入给前端。前端拿到数据之后进行展示即可。整体的流程就是这样。

具体实现

以下我结合我之前做的商医通项目来进行展示在微信登录功能中作为前端开发的角色需要完成的任务。

首先在文件的静态页面中引入微信扫码登录需要的核心插件wxlogin.js。

<html lang="en"><head><meta charset="UTF-8" /><link rel="icon" type="image/svg+xml" href="/vite.svg" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>尚医通</title><script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js"></script></head><body><div id="app"></div><script type="module" src="/src/main.ts"></script></body>
</html>

第二步在需要使用微信登录的地方实例一个官方文档提供给我们的js对象。

var obj = new WxLogin({self_redirect:true,id:"login_container", appid: "", scope: "", redirect_uri: "",state: "",style: "",href: ""});

在这个项目点击登录是默认弹出的页面是手机登录的页面,因此点击底下的微信小图标来进行场景的切换,从手机登录到微信登录。因此在相应的切换场景中使用上述的js对象。

因此对微信扫描登录以及低下的微信小图标封装到一个盒子里面,给这个盒子绑定相应的事件,当点击时进行场景的切换以及定义一个WxLogin对象。

const changeScene = async () => {scene.value = 1;new WxLogin({self_redirect: true,id: "login_container",//appid需要向服务器发请求之后得到appid: "",scope: "snsapi_login",//填写授权回调域路径,就是用户授权成功以后,微信服务器向公司后台推送code的地址redirect_uri: "",//statue就是后台服务器重定向的地址携带用户信息state: "",style: "black",href: "",});
}

相应的实例参数说明表格如下:

参数是否必须说明
self_redirecttrue:手机点击确认登录后可以在 iframe 内跳转到 redirect_uri,false:手机点击确认登录后可以在 top window 跳转到 redirect_uri。默认为 false。
id第三方页面显示二维码的容器id
appid应用唯一标识,在微信开放平台提交应用审核通过后获得
scope应用授权作用域,拥有多个作用域用逗号(,)分隔,网页应用目前仅填写snsapi_login即可
redirect_uri重定向地址,需要进行UrlEncode
state用于保持请求和回调的状态,授权请求后原样带回给第三方。该参数可用于防止csrf攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加session进行校验
style提供"black"、"white"可选,默认为黑色文字描述。详见文档底部FAQ
href自定义样式链接,第三方可根据实际需求覆盖默认样式。详见文档底部FAQ

以上的参数 id为显示二维码的容器id,因此需要在顶部是设置一个专门存放二维码的容器,相应代码如下:

     <div class="webchat" v-show="scene == 1"><div id="login_container"></div></div>

appid,redirect_uri,以及state在这个项目中需要向后台服务器发送请求,因此找到后台服务器中对应的接口,发请求获取相应参数的数值,因为本项目是使用typescript编写的,因此需要首先编写返回的数据的类型,对其先进行定义,再编写相应的接口函数。相应代码如下:

export interface WXLogin{"redirectUri":string,"appid": string,"scope": string,"state": string
}
import request from '@/utils/request';
import type { WXLoginResponseData } from './type'
enum API {WXLOGIN_URL = '/user/weixin/getLoginParam/'
}
export const reqWxLogin = (wxRedirectUri: string) => request.get<any, WXLoginResponseData>(API.WXLOGIN_URL + `?wxRedirectUri=${wxRedirectUri}`);

接口封装好了之后在相应的组件页面上发请求,在我们点击微信登录的图标之后发请求,因此在我们上面的changScene方法中在增加如下代码:

const changeScene = async () => {let redirect_URL = encodeURIComponent(window.location.origin + '/wxlogin');let result: WXLoginResponseData = await reqWxLogin(redirect_URL);
}

此部分主要完成向后端服务器发请求,获取微信扫描登录页面的参数,发请求的同时还需要携带一个参数:redirect_URL,告诉服务器用户授权成功以后重定向项目到某个页面,我们上述代码是重定向到/wxlogin页面,后台服务器会将用户的数据注入到/wxlogin页面中。因此changScene()完整的代码如下:

const changeScene = async () => {scene.value = 1;let redirect_URL = encodeURIComponent(window.location.origin + '/wxlogin');let result: WXLoginResponseData = await reqWxLogin(redirect_URL);new WxLogin({self_redirect: true,id: "login_container",appid: result.data.appid,scope: "snsapi_login",redirect_uri: result.data.redirectUri,state: result.data.state,style: "black",href: "",});
}

因此现在点击相应的微信登录页面,会使用iframe内嵌生成的二维码到页面的容器中。

接下来我们需要创建一个页面来让后台服务器重定向时通过query参数注入相应的用户信息,我们上述的代码已经指定重定向到了welogin页面上了,因此在pages文件夹下进行创建。并在路由配置文件中进行设置(此部分的代码就不展示了)。welogin页面的代码如下:

<template><div></div>
</template><script setup lang="ts">
//获取用户信息
import {useRoute} from 'vue-router';
//获取路由对象
let $route=useRoute();
//持久化存储用户信息
localStorage.setItem('USERINFO',JSON.stringify($route.query));
//当微信登录成功时,会有短暂的该容器显示重定向的页面,会影响视觉效果,因此对其进行隐藏
let html:any=document.querySelector('html');
html.style.display='none';
</script><style scoped>
</style>

此部分主要是通过路由来获取到后台服务器重定向返回的用户信息,并将获取到的用户信息进行持久化的存储。之后需要做的就是关闭登录界面,同时仓库中也需要存一份用户的信息。那具体如何实现后面的功能呢?

在这个项目中是通过切换场景为微信扫码时,进行判断本地的存储是否有用户的信息,若有则关闭相应的登录界面并存储到对应的仓库中,并展示数据。我们使用到watch来进行监听场景的切换。相应代码如下:

watch(()=>scene.value,(val:number)=>{if(val===1){userStore.queryState();}
})

在watch()中使用了queryState()方法,该方法编写在用户的仓库中,具体的方法如下:

 queryState(){let timer=setInterval(()=>{if(localStorage.getItem('USERINFO')){this.visiable=false;this.userInfo=JSON.parse(localStorage.getItem('USERINFO') as string);clearInterval(timer);}},1000);}

该方法主要是查询用户是否扫描成功,每隔一秒调用一次,如果有用户的信息,则将登录页面关闭,并将用户信息存储到仓库中,若没有则会在一秒之后再次判断。最后相应的页面获取仓库中的信息进行展示。

好啦!本次的文章就到这里了,期待下一次的见面!

http://www.qdjiajiao.com/news/8748.html

相关文章:

  • 那些论坛网站做的比较好seo软件优化工具软件
  • 做贷超网站 前期需要什么分析优化大师兑换码
  • 怎么用ai做企业网站框架站长工具平台
  • java培训学费多少钱google 推广优化
  • 哪家网站开发公司靠谱今日新闻联播主要内容摘抄
  • 258做网站靠谱么专业网站快速
  • 网站加支付功能网站营销方案
  • 企业网站建设与网页设计二维码引流推广的平台
  • 佛山顺德网站建设公司软文营销名词解释
  • 做校园后勤管理网站得重点难点搜索引擎营销方案例子
  • 兖州网站开发校园推广的方式有哪些
  • wordpress4.7安装南通seo网站优化软件
  • 企业网站建设费用财务处理谷歌浏览器2021最新版
  • 做外贸找客户最好用的网站外贸网站建设 google
  • 网站建设技术大全新网站百度收录要几天
  • 用微信公众平台做分类广告网站关键词排名优化品牌
  • 网站建设维护更新自动优化句子的软件
  • 登录网站显示系统维护怎么做青山seo排名公司
  • 长沙市规划建设局网站桂林seo排名
  • 天河网站建设公司螺蛳粉营销策划方案
  • 网站js修改代码aso推广优化
  • 网站说服力 营销型网站策划 下载电商大数据查询平台免费
  • 新闻标题做的好的网站深圳外包seo
  • node.js做企业网站百度小说搜索风云榜总榜
  • 怎样在政府采购网站做备案怎么进行网站推广
  • 做机票在线预订网站百度推广个人怎么开户
  • 网站建设与管理好吗北京网站优化页面
  • 做全景哪个网站不模糊武汉关键词排名提升
  • 网站开发工作好不好seo网站推广工作内容
  • 手机网站开发+图库类企业seo排名优化