Giter VIP home page Giter VIP logo

huihuihu123 / loginbyqrcode Goto Github PK

View Code? Open in Web Editor NEW

This project forked from javaerjohn/loginbyqrcode

0.0 1.0 0.0 94 KB

✨ 相信大家对二维码都不陌生,生活中到处充斥着扫码登录的场景,如登录网页版微信、支付宝等。最近学习了一下扫码登录的原理,感觉蛮有趣的,于是自己实现了一个简易版扫码登录的 Demo,以此记录一下学习过程。

Java 80.65% HTML 19.35%

loginbyqrcode's Introduction

Java 语言实现简易版扫码登录

📖 原理解析

详见 Java 语言实现简易版扫码登录

🔨 环境准备

  • JDK 1.8:项目使用 Java 语言编写。

  • Maven:依赖管理。

  • Redis:Redis 既作为数据库存储用户的身份信息,也作为缓存存储二维码信息、token 信息等。

💻 主要依赖

  • SpringBoot:项目基本环境。

  • Hutool:开源工具类,其中的 QrCodeUtil 可用于生成二维码图片。

  • Thymeleaf:模板引擎,用于页面渲染。

🚀 项目运行

1. 数据准备

由于项目中并没有实现真实的手机端扫码的功能,因此使用 Postman 模仿手机端向服务端发送请求。首先需要确保服务端存储着用户的信息,即在 Test 类中执行如下代码:

@Test
void insertUser() {
   User user = new User();
   user.setUserId("1");
   user.setUserName("John同学");
   user.setAvatar("/avatar.jpg");
   cacheStore.put("user:1", user);
}

手机端发送请求时需要携带手机端 token,这里我们为 useId 为 "1" 的用户生成一个 token(手机端 token):

@Test
void loginByPhone() {
   String accessToken = CommonUtil.generateUUID();
   System.out.println(accessToken);
   cacheStore.put(CommonUtil.buildAccessTokenKey(accessToken), "1");
}

手机端 token(accessToken)为 "aae466837d0246d486f644a3bcfaa9e1"(随机值),之后发送 "扫码" 请求时需要携带这个 token。

2. 扫码登录流程展示

启动项目,访问 localhost:8080/index

点击登录,并在开发者工具中找到二维码 id(uuid):

打开 Postman,发送 localhost:8080/login/scan 请求,Query 参数中携带 uuid,Header 中携带手机端 token:

上述请求返回 "扫码成功" 的响应,同时还返回了一次性 token。此时 PC 端显示出扫码用户的头像:

在 Postman 中发送 localhost:8080/login/confirm 请求,Query 参数中携带 uuid,Header 中携带一次性 token:

"确认登录" 请求发送完成后,PC 端随即获取到 PC 端 token,并成功查询用户信息:

loginbyqrcode's People

Contributors

javaerjohn avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.