微信用户扫码登录和登录退出的业务逻辑实现(java版)

一、微信用户扫码登录业务逻辑

微信用户登录的时候,每次都会带着openid(用户唯一标志),因此当用户第一次登录的时候,我们就需要将这个openid保存到数据库,或者保存到redis中,当用户再次登录的时候,我们需要进行下面的步骤。

第一步:我们需要到数据库里用户信息表查找有没有此openid

这里Controller需要调用service里的方法,数据库里没有,则用户不能登录,有就进入第二步

第二步:我们需要将这个openid保存在redis中。

另外,产生一个唯一的token作为key,这个token也是唯一的标识。

String token= UUID.randomUUID().toString();

这里才采用的是UUID生成,当然你也可以用其他的方式生成。

然后以(token,openid)这样的key、value对保存到redis中。

Integer expire= RedisConstant.EXPIRE;
redisUtils.set(String.format(RedisConstant.TOKEN_PREFIX,token),openid,expire, TimeUnit.SECONDS);

这一步就是用redis保存,如果不清楚redis,可以先去了解一下redis。

第三步:设置token到cookie中。
CookieUtil.set(response, CookieConstant.TOKEN,token,expire);

下面再给出cookie的工具类

/**
 * Cookie工具类
 * Created by SqMax on 2018/4/1.
 */
public class CookieUtil {

    public static void set(HttpServletResponse response,
                           String name,
                           String value,
                           int maxAge){
        Cookie cookie=new Cookie(name,value);
        cookie.setPath("/");
        cookie.setMaxAge(maxAge);
        response.addCookie(cookie);
    }

    /**
     * 获取cookie
     * @param request
     * @param name
     * @return
     */
    public static Cookie get(HttpServletRequest request,
                           String name){

        Map<String,Cookie> cookieMap=readCookieMap(request);
        if(cookieMap.containsKey(name)){
            return cookieMap.get(name);
        }else{
            return null;
        }

    }

    /**
     * 将Cookie封装成Map
     * @param request
     * @return
     */
    private static Map<String,Cookie> readCookieMap(HttpServletRequest request){
        Map<String,Cookie> cookieMap=new HashMap<>();
        Cookie[] cookies=request.getCookies();
        if(cookies!=null){
            for(Cookie cookie:cookies){
                cookieMap.put(cookie.getName(),cookie);
            }
        }
        return cookieMap;
    }
}

这样就把(CookeiConstant.TOKEN,token)这样的key、value对保存的了用户的cookie中了。

经过这三步,用户就能成功登录系统了。

二、微信用户退出登录

用户登出也需要三步

第一步: 用户登出请求发出时,到请求对象HttpServletRequest里,查找key为CookieConstant.TOKEN的cookie。
Cookie cookie=CookieUtil.get(request,CookieConstant.TOKEN);

cookie工具类见上面。

第二步 清除redis中的用户登录信息
redisTemplate.opsForValue().getOperations().delete(String.format(RedisConstant.TOKEN_PREFIX,cookie.getValue()));
第三步 清除用户的cookie信息
CookieUtil.set(response,CookieConstant.TOKEN,null,0);

这样用户就成功登出了。

三、总结

总的来说微信登录和退出就分为以下三步:

  • 查看openid数据库是否存在
  • 将token和openid保存到redis
  • 将token唯一标识设置到cookie,供前端使用

猜你喜欢

转载自blog.csdn.net/sihai12345/article/details/80924313