小程序 判断是否为新用户 登陆授权 封装request请求

小程序 判断是否为新用户 登陆授权 封装request请求,第1张

第一,进入小程序全局先进行获取微信code,用code作为参数请求接口得到用户登录信息,同时判断是否为新用户

第二,请求接口,发生登录失效(token失效)时,自动登录后,再重新请求。

第三,请求接口,当返回未登录(授权)提示时,做兼容。(比如跳到授权页,这个具体看接口的业务逻辑)

在utiljs中封装一些登录、请求方法。

1调用微信登录,获取微信code

2通过微信code登录,获取用户信息(token,userInfo)

3请求数据,这里只封装请求数据的参数与方法,不处理各种code

4封装request请求方法,这里专门处理返回不同code的情况

各个页面中的接口数据请求,都是调用这个方法。

在appjs的onLaunch方法中,判断token和userInfo是否存在,存在就不是新用户,否则根据微信返回的code,去请求后端接口,查看返回的信息,是否为新用户。

很多时候要防止重复提交 比如论坛在发表提问的时候 要是不控制那就可以一直提交~

使用方法 论坛为例

ask do 为跳到提问页面的action

ask jsp 为提问页面

askok do:为提问成功提交的action

askok jsp 处理提问之后的跳转的jsp

首先在ask这个action里面加入saveToken(request);这是为了在提问页面即ask jsp页面生成一个隐藏 的表单

<input type= hidden name= apacl TOKEN value= a b ff b b d >

在ask jsp页面做以下处理 使用form为<:formmethod= post action= askok do >  因此要引入这个标签 否则不会生成这个隐藏表单

form写法 之后不写name 没有这个属性 但要在struts config xml里面配置这个actionform 我们 可以定义为question  同时要配置askok这个action里面要写入对应的form

<action path= /askok type= name= question >必须写上这个否则会报找不到FORM的 错误

如果要在ask jsp这个页面做js处理要用到FORM name的话可以直接写 question 因为struts自动 生成了这个form的name 生成之后的:<form name= bangquestion method= post action= /askok do >

ask jsp 这个页面自动生成加入FORM name

然后在askok do里面写if (isTokenValid(ac getRequest() true)) {

添加提问

}else

{

跳转提示

lishixinzhi/Article/program/Java/ky/201311/28184

需要重新获取code,然后得到access token。 即要重新调用授权界面。需要用refresh token刷新access token。

关于access token过期的解决办法:

是在内层函数中,如果执行失败,并且是access_token过期的异常,则会在request的时候抛出专门的异常。

在外围函数如果接收到了这个异常,则会抛出让装饰器接收到,装饰器收到这个异常后会删掉缓存中的token,并且重新执行该函数,这样该函数在执行的时候,就会去主动的获取最新的token。

assess token过期的原因:

测试服和线上服使用同一个app_id和secret来获取,可能会存在其中一方获取的token是旧的。

代码中没有统一的从一个地方来获取,而是直接从官网获取,导致不统一(看了代码,没有发现单独获取token的地方)。

请求获取新的token的时候失败(应该不可能,因为请求成功以后会在redis中缓存两个小时,但是发现没过多久又再次失效,因此主要原因应该不是这个)。

异步队列等待的时间较长,正好执行的时候token已经更新(应该不可能,获取token是在异步函数中执行,而不是通过函数参数来传递)。

1、JWT的构成

- 头部(header):描述该JWT的最基本的信息,如类型以及签名所用的算法。

- 负载(payload):存放有效信息的地方。

- 签证(signature):base64加密后的header、base64加密后的payload和密钥secret加密后组成。

2、整合JWT

21 引入JWT依赖

comauth0

java-jwt

3183

22 编写JWTUtils工具类

package comstockutils;

import comauth0jwtJWT;

import comauth0jwtJWTCreator;

import comauth0jwtJWTVerifier;

import comauth0jwtalgorithmsAlgorithm;

import comauth0jwtinterfacesDecodedJWT;

import comauth0jwtinterfacesVerification;

import javautilCalendar;

import javautilMap;

public class JWTUtils {

private static final String SING="@#$%^&";

// 生成token

public static String getToken(Map map){

Calendar instance = CalendargetInstance();

instanceadd(CalendarMINUTE,30);

//创建jwt builder

JWTCreatorBuilder builder = JWTcreate();

//payload

builderwithExpiresAt(instancegetTime());

mapforEach((k,v)->{

builderwithClaim(k,v);

});

//设置签名

String token = buildersign(AlgorithmHMAC256(SING));

return token;

}

//验证令牌

public static void verifyToken(String token){

JWTVerifier require = JWTrequire(AlgorithmHMAC256(SING))build();

requireverify(token);

}

//获取token信息

public static DecodedJWT getTokenInfo(String token){

DecodedJWT verify = JWTrequire(AlgorithmHMAC256(SING))build()verify(token);

return verify;

}

}

23 编写拦截器

public class JWTInterceptor implements HandlerInterceptor {

@Override

public boolean preHandle(>

以上就是关于小程序 判断是否为新用户 登陆授权 封装request请求全部的内容,包括:小程序 判断是否为新用户 登陆授权 封装request请求、struts中token的使用方法、获取access token失败什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9753847.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-01
下一篇2023-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存