首页 > 其他分享 >登录系统及表结构设计

登录系统及表结构设计

时间:2023-08-14 18:02:07浏览次数:28  
标签:String 登录 用户 public platform 及表 第三方 结构设计

「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间
https://drive.uc.cn/s/2aeb6c2dcedd4
AIGC资料包
https://drive.uc.cn/s/6077fc42116d4
https://pan.xunlei.com/s/VN_qC7kwpKFgKLto4KgP4Do_A1?pwd=7kbv#
https://yv4kfv1n3j.feishu.cn/docx/MRyxdaqz8ow5RjxyL1ucrvOYnnH

文章字数统计:共3474字。阅读需要10分钟

1. 引言

在现代互联网应用中,用户登录功能是必不可少的一部分。为了提供更好的用户体验和便捷的登录方式,许多应用都支持通过微博、QQ、微信等第三方平台进行登录。本文将介绍如何设计一个支持三方登录的登录系统,并给出相应的表结构设计。

2. 登录系统的设计

2.1 功能需求

登录系统主要包括以下功能需求:

  • 用户通过账号密码登录
  • 用户通过微博、QQ、微信等第三方平台登录
  • 用户注册新账号
  • 用户账号信息管理(包括修改密码、绑定第三方账号等)

2.2 技术选型

为了实现登录系统的功能需求,我们可以使用以下技术进行开发:

  • 前端页面:HTML、CSS、JavaScript和相应的前端框架(如Vue.js、React等)
  • 后端开发:Java语言和Spring Boot框架
  • 数据库:关系型数据库(如MySQL)存储用户信息和第三方登录信息
  • 第三方登录API:微博开放平台、QQ开放平台和微信开放平台提供的登录API

2.3 系统设计

2.3.1 用户表

我们需要设计一个用户表来存储用户的基本信息,包括用户ID、用户名、密码等。表结构如下:

字段名 类型 描述
id int 用户ID
username varchar(50) 用户名
password varchar(50) 密码
email varchar(100) 邮箱
phone varchar(20) 手机号码
created_at datetime 创建时间
updated_at datetime 修改时间

2.3.2 第三方登录表

为了支持三方登录,我们需要设计一个第三方登录表来存储用户的第三方登录信息,包括用户ID、第三方平台的用户ID等。表结构如下:

字段名 类型 描述
id int 主键ID
user_id int 用户ID
platform varchar(20) 第三方平台名称
open_id varchar(100) 第三方平台的用户ID
access_token varchar(100) 访问令牌
created_at datetime 创建时间
updated_at datetime 修改时间

2.4 登录流程

登录系统的登录流程如下:

  1. 用户选择登录方式(账号密码登录或第三方登录)。
  2. 用户输入相应的登录信息(用户名和密码或第三方平台的授权)。
  3. 系统验证用户输入的信息是否正确。
  4. 验证成功则登录系统,否则提示相应的错误信息。

2.5 第三方登录流程

第三方登录的流程如下:

  1. 用户选择第三方登录方式,系统生成相应的第三方登录链接。
  2. 用户点击链接跳转到第三方登录平台进行授权并获取相应的授权码。
  3. 系统使用授权码请求第三方平台获取用户的用户ID和访问令牌。
  4. 系统根据用户ID和访问令牌验证用户的身份,并根据需要进行用户注册或登录。
  5. 验证成功则登录系统,否则提示相应的错误信息。

3. 代码示例

以下是登录系统的代码示例,包括用户登录和第三方登录的实现:

@RestController
public class LoginController {

    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public ResponseEntity<String> login(@RequestBody LoginRequest loginRequest) {
        // 验证用户名和密码
        boolean isValid = userService.validateUser(loginRequest.getUsername(), loginRequest.getPassword());
        if (isValid) {
            // 生成并返回登录令牌等信息
            String token = userService.generateToken(loginRequest.getUsername());
            return ResponseEntity.ok(token);
        } else {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Invalid username or password");
        }
    }

    @GetMapping("/login/{platform}")
    public ResponseEntity<String> loginWithPlatform(@PathVariable("platform") String platform) {
        // 生成第三方登录链接
        String url = userService.generateLoginUrl(platform);
        return ResponseEntity.ok(url);
    }

    @PostMapping("/login/callback/{platform}")
    public ResponseEntity<String> handleLoginCallback(@PathVariable("platform") String platform, @RequestParam("code") String code) {
        // 根据授权码获取用户的用户ID和访问令牌
        ThirdPartyUserInfo userInfo = userService.getThirdPartyUserInfo(platform, code);
        if (userInfo != null) {
            // 注册或登录用户
            userService.registerOrLoginWithThirdParty(platform, userInfo);
            // 生成并返回登录令牌等信息
            String token = userService.generateToken(userInfo.getOpenId());
            return ResponseEntity.ok(token);
        } else {
            return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("Failed to get third-party user info");
        }
    }
}

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    public boolean validateUser(String username, String password) {
        // 验证用户名和密码逻辑
    }

    public String generateToken(String username) {
        // 生成登录令牌逻辑
    }

    public String generateLoginUrl(String platform) {
        // 生成第三方登录链接逻辑
    }

    public ThirdPartyUserInfo getThirdPartyUserInfo(String platform, String code) {
        // 获取第三方登录用户信息逻辑
    }

    public void registerOrLoginWithThirdParty(String platform, ThirdPartyUserInfo userInfo) {
        // 第三方登录注册或登录逻辑
    }
}

@Repository
public class UserRepository {

    public User findByUsername(String username) {
        // 根据用户名查询用户
    }

    public User save(User user) {
        // 保存用户
    }

    public ThirdPartyLogin saveThirdPartyLogin(ThirdPartyLogin thirdPartyLogin) {
        // 保存第三方登录信息
    }
}

4. 总结

通过本文的介绍,我们了解了如何设计一个支持三方登录的登录系统,并给出了相应的表结构设计和代码示例。登录系统通过用户表和第三方登录表来存储用户信息和第三方登录信息,通过前端页面和后端接口实现用户登录和第三方登录的功能。同时,我们也详细介绍了登录流程和第三方登录流程,帮助你更好地理解登录系统的实现。

标签:String,登录,用户,public,platform,及表,第三方,结构设计
From: https://blog.51cto.com/u_16188843/7079656

相关文章

  • django添加装饰器进行登录角色验证
    目的:在用户请求各种接口时验证role字段是否不为user1.创建装饰器  decorators.pyfromdjango.httpimportJsonResponsefromfunctoolsimportwrapsfromutils.tokenimportget_useridfromyshop.modelsimportMyUserdefcheck_role(view_func):@wraps(view_......
  • Windows服务器管理技巧:多用户登录设置、开启防火墙与SSH远程登录配置指南
    WindowsServer服务器管理技巧:对于使用WindowsServer服务器开发人员或者运维人员初学者来说,可能会遇到很多问题,比如:如何设置允许多用户同时登录服务器?如何开启服务器防火墙?Windows如何配置SSH远程登录?等等,如果遇到了这些问题,来看看这篇文章就能解决啦!一、如何设置允许多用户同时......
  • bootstrap 5登录页
     bootstrap5登录页从bootcss网站上扒下来的,点那个用户名和密码的框框有个文字缩小的效果 <!doctypehtml><htmllang="zh-CN"><head><metacharset="utf-8"><metaname="viewport"content="width=device-width,initial......
  • sql提示该账户当前被锁定,所以用户sa登录失败。系统管理员无法将该账户解锁
    【问题】:sql提示该账户当前被锁定,所以用户sa登录失败。系统管理员无法将该账户解锁解决办法用Windows账户登录查询分析器,输入命令解锁ALTERLOGINsaENABLE;GOALTERLOGINsaWITHPASSWORD='你的新密码'unlock,check_policy=off,check_expiration=off;GO......
  • Spring Boot + Vue3前后端分离实战wiki知识库系统<十二>--用户管理&单点登录开发一
    目标:在上一次https://www.cnblogs.com/webor2006/p/17533745.html我们已经完成了文档管理的功能模块开发,接下来则开启新模块的学习---用户登录,这块还是有不少知识点值得学习的,先来看一下整体的效果,关于效果官网有一个体验地址:wiki.courseimooc.com,如下:其效果也是人人熟知的,下面......
  • 集成gitee第三方登录
    第三方登录的原理所谓第三方登录,实质就是OAuth授权。用户想要登录A网站,A网站让用户提供第三方网站的数据,证明自己的身份。获取第三方网站的身份数据,就需要OAuth授权。举例来说,A网站允许Gitee登录,背后就是下面的流程。A网站让用户跳转到Gitee。Gitee要求用户登录......
  • - csrf跨站请求的相关装饰器 - Auth模块的使用 - 凡是跟登录、注册、修改密码、注销
    csrf跨站请求的相关装饰器 Django中有一个中间件对csrf跨站做了验证,我只要把csrf的这个中间件打开,意味着所有的方法都要被验证在所有的视图函数中:只有几个视图函数做验证只有几个函数不做验证csrf_protect:哪个视图函数加了这个装饰器,这个函数就会做验证 csrf_exemp......
  • 禁用账号密码使用ssh私钥登录服务器
    1、生成ssh信息id_rsa为私钥,id_rsa.pub为公钥。私钥自己下载到本地电脑妥善保存(丢失后就无法再登陆了)建议删除服务器端的私钥。公钥则可以任意公开。ssh-keygen-trsa--------------------------------------输入生成的名称密码确认密码2、公钥导入到系统中cat/roo......
  • Spring:登录功能如何做
    前言今天是2023年8月12号,周六,今天不用上班,只是前几天得知消息我前项目组的同事们被裁员,说不定哪个明天就轮到我了吧,所以今天过来公司,研究下公司项目架构,离职的时候带点东西也不算亏说回登录,我还未工作前,行内人一直告诉我登录功能很简单应届生应该都应该会,可工作两年的我发现,登录......
  • 怎么实现一个登录页面
    怎么实现一个登录页面在api目录下面,建立一个login.js文件,配置三个发送axios请求的函数并导出获取token使用token兑换info退出登录//login.js//获取axios实例requestimportrequestfrom'@/util/request';//登录,获取tokenconstreqLogin=(username,passw......