微信端前后分离开发中,授权认证,获取token和openid是必不可少的一步。

我们的思路是,每次调用接口前,判断cookie里面是否有token和openid,没有的话判断url参数中是否存在,没有的话跳转到授权认证页面。授权认证之后,会将token和openid放在url上返回回来,然后添加到cookie,这样就形成了一个闭环。代码如下

export function Cklogin () {

let url = window.location.href

let admin = {

openid: '',

token: ''

}

if (getCookie('openid') && getCookie('token')) {

admin.openid = getCookie('openid')

admin.token = getCookie('token')

} else {

if (getQueryString('openid') && getQueryString('token')) {

setCookie('openid', getQueryString('openid'))

setCookie('token', getQueryString('token'))

admin.openid = getCookie('openid')

admin.token = getCookie('token')

} else {

window.location.href = 'http://aaaa?returnUrl=' + url

}

}

return admin

}

// --------------获取cookie

function getCookie (cookieName) {

let allcookies = document.cookie

let cookiePos = allcookies.indexOf(cookieName)

let value = ''

if (cookiePos !== -1) {

cookiePos += cookieName.length + 1

let cookieEnd = allcookies.indexOf(';', cookiePos)

if (cookieEnd === -1) {

cookieEnd = allcookies.length

}

value = unescape(allcookies.substring(cookiePos, cookieEnd))

}

return value

}

// -------获取url中的参数

function getQueryString (name) {

let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i')

let r = window.location.search.substr(1).match(reg)

if (r != null) return unescape(r[2]); return null

}

// -----------------设置cookie

function setCookie (name, value) {

let Days = 30

let exp = new Date()

exp.setTime(exp.getTime() + Days * 24 * 60 * 60 * 1000)

document.cookie = name + '=' + escape(value) + ';expires=' + exp.toGMTString()

}

然后是config.js ,这里主要做两个配置,第一是定义一个判断返回值是否正确的ERR_OK变量,另一个就是定义axios。axios默认会以get方式发送请求,显然我更想要一个post。但是试了半天总是有问题,找到一个方法,封装起来着这里统一调用。

import axios from 'axios'

export const ERR_OK = 0

export function axiosFn (url, data) {

return axios({

url: url,

method: 'post',

data: data,

transformRequest: [function (data) {

let ret = ''

for (let it in data) {

ret += encodeURIComponent(it) + '=' + encodeURIComponent(data[it]) + '&'

}

return ret

}],

headers: {

'Content-Type': 'application/x-www-form-urlencoded'

}

}).then((res) => {

return Promise.resolve(res.data)

})

}

然后就是业务调用了。又来了上面几步,这里就简单了。首先要进行环境判断,开发环境下我是用固定的token和openid即可,因为开发环境下没办法微信授权获取认证。生产环境的时候,我们就要调用校验,然后获取token和openid,如果token和openid没有,便会进行重新授权认证获取。

import {axiosFn} from './config'

import {Cklogin} from './cklogin'

export function getInitVals () {

let url = ''

let data

if (process.env.NODE_ENV === 'development') {

data = {

'openid': '11',

'token': 'asdfsdfsfsf'

}

} else if (process.env.NODE_ENV === 'production') {

let CkloginFn = Cklogin()

data = {

'openid': CkloginFn.openid,

'token': CkloginFn.token

}

}

url = 'http://aaaaaaa'

return axiosFn(url, data)

}

前后端分离项目token怎么验证_微信端前后端分离开发中token验证和数据的获取...相关推荐

  1. 微信 SHA1 签名_微信公众号自动回复功能开发

    微信公众号自动回复功能开发 本篇主要讲解 微信公众号自动回复功能开发,让我们自己去托管公众号回复的功能,这样可以更加灵活的根据公众号收到的信息来制定特定的回复信息,一起来了解吧! 1.注册公众号 如果 ...

  2. 概要设计 英文_互联网知识大全:软件开发中和文档常见的英文缩写,还不快收藏...

    概要设计 英文_互联网知识大全:软件开发中和文档常见的英文缩写,还不快收藏... https://blog.csdn.net/weixin_39914243/article/details/11123 ...

  3. 新手摸爬滚打:vue+springboot前后端分离项目演示(三)——axios实现前后端交互

    导语:路漫漫其修远兮,吾将上下而求索 前篇: 新手摸爬滚打:vue+springboot前后端分离项目演示(一)--vue cli创建vue2项目 新手摸爬滚打:vue+springboot前后端分离 ...

  4. 微信小程序python token验证_微信小程序登录对接Django后端实现JWT方式验证登录

    点击授权按钮后可以显示部分资料和头像,点击修改资料可以修改部分资料. 1.使用微信小程序登录和获取用户信息Api接口 2.把Api获取的用户资料和code发送给django后端 3.通过微信接口把co ...

  5. url 微信公众号开发 配置失效_微信开发者中心配置服务器url时token验证失败的原因和处理方法...

    一.问题由来 在使用URL和Token启用微信公众平台开发模式消息接口的时候,我们会碰到下面三种情况 1. token校验失败 这样回头检查一下各项配置是否正确.如果确定配置没有问题,请按下面的方法检 ...

  6. api token 什么意思_还分不清 Cookie、Session、Token、JWT?

    什么是认证(Authentication) 通俗地讲就是验证当前用户的身份,证明"你是你自己"(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就 ...

  7. 项目创建venv、_都2020年了,居然还有人没有在数据科学项目中使用Docker?

    本文将告诉大家什么是 Docker 以及如何在 Python 中使用 Docker. 新手程序员面临的最困难的问题之一是理解"环境"的概念.环境就是你编写代码的系统,听起来很容易, ...

  8. passport身份验证_了解如何使用Passport.js处理Node身份验证

    passport身份验证 by Antonio Erdeljac 通过安东尼奥·埃尔德雅克 了解如何使用Passport.js处理Node身份验证 (Learn how to handle authe ...

  9. 微信阅读原文直接打开浏览器_微信打开网址添加在浏览器中打开提示

    使用 http://mp.weixin.qq.com/mp/redirect?url=http://caibaojian.com/test.apk#weixin.qq.com#wechat_redir ...

最新文章

  1. 《结网》十年,《结网2》开启产品经理的无限游戏
  2. 历届华人 AAAI Fellows
  3. 教你用java统计目录下所有文档的词频
  4. php母版页怎么,ASP.NET
  5. springMVC通过spring.xml对属性注入bean值(工厂模式)
  6. opencv 检测几何图形_使用OpenCV + ConvNets检测几何形状
  7. 微软用的工具,统一财务三大表及高级分析通用模板
  8. [react] 使用react写一个todo应用,说说你的思路
  9. Android 跳转到ViewPager指定页面
  10. html怎么设计自动出现提示的数据列表?怎么设计数据列表像百度一样怎么随用户输入而更新
  11. 介绍Node assert, should.js, mocha, Karma, Travis CI
  12. censtos6.5安装java 8_Centos6.5 安装JDK
  13. 有Excel、Tableau、PowerBI都能做数据分析,为什么还要用Python
  14. 操作系统---高响应比优先调度算法实例
  15. linux下的超级服务器inetd
  16. C语言为什么不执行数组下标的有效性检查
  17. c语言写红绿灯程序,51单片机用C语言实现交通灯(红绿灯)源程序
  18. 设置GPU及显存大小
  19. 怎么样区分劳动关系和劳务关系
  20. C++打开文件夹中的多个文件并计算文件中数据的平均值

热门文章

  1. 中线桩地质体桩号计算记录
  2. 绥化学院2021聋人高考成绩查询,2020聋人高考形势分析
  3. 杰理之静电测试方法【篇】
  4. 软考中级-计算机系统
  5. 2080Ti在Ubuntu中重装系统后U盘安装显卡驱动
  6. Linux dstat 综合监控工具
  7. 双色球 机选号码+自选号码
  8. revit软件中怎么创建水平剖面?
  9. PAT乙级-1010
  10. 想要随时随地在任何光线下拍摄吗?AI智能图像降噪软件带给大家~