微博怎么以账号形式登录(如何设计一个可扩展的登录功能)

首页教程更新时间:2023-05-15 01:55:57

本文主要分享了如何设计一个可扩展的登录功能。

一、多种登录方式(需要有一个唯一值来绑定各种登录方式,目前业界用的比较多的是手机号)

1.用户名 密码登录

最原始的登录方式,这种登录方式与注册功能是分开的,业界慢慢放弃这种方式了

2.手机号 验证码登录

业界大部分使用的登录方式,这种登录方式与注册功能是一体实现的,但这种方式存在短信验证码获取体验问题

3.本机号码一键登录

基于方式2的优化,把登录体验做到极致

4.第三方授权登录(如微信、微博、QQ等)

登录方式的优化,登录体验可以做到跟方式3一样,这里的授权是指微信、微博、QQ等第三方平台授权登录时获取的code,根据这个code可以获取第三方平台的用户信息(如openid、unionid)

5.手机号 验证码登录 绑定第三方授权

作为方式4的补充,一般是方式4完成的情况下进行。通常情况下授权登录后并不知道用户是否已存在账号,需要引入手机号来做唯一值校验

二、在微服务中设计一个认证服务,以上的登录方式统一在认证服务中实现

微博怎么以账号形式登录,如何设计一个可扩展的登录功能(1)

1.C端API大致可以简单分为两种,一种是需用户登录后可访问,另一种是无需登录也可访问

2.请求不带token,肯定是未登录的;带了token,也不一定登录的,可能token是失效的

3.如果带了token,在网关进行统一处理,解析token获取里面的用户ID(生成token时设置进去的)并设置到header在微服务内部传递,如果token过期了则不要设置到header

4.BFF层的微服务自行根据header能否取到用户ID来判断用户是否登录,如果是需要登录后才能访问的API且无用户ID,则响应固定的错误码,与前端同事约定响应该错误码就引导登录

5.登录的请求转发到认证服务,注册/登录一体化,响应token给到前端,前端把token做本地存储,后续的所有请求都带上token

三、核心代码

1.登录接口代码

微博怎么以账号形式登录,如何设计一个可扩展的登录功能(2)

2.解析token获取用户ID并将设置到header

微博怎么以账号形式登录,如何设计一个可扩展的登录功能(3)

3.根据header有无用户ID拦截需登录API

微博怎么以账号形式登录,如何设计一个可扩展的登录功能(4)

四、存储表结构

CREATE TABLE `bu_user_info` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `nickname` varchar(32) DEFAULT NULL COMMENT '昵称', `avator` varchar(32) DEFAULT NULL COMMENT '头像', `remark` varchar(255) DEFAULT NULL COMMENT '备注', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';

CREATE TABLE `bu_user_oauth` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `user_id` int(11) NOT NULL COMMENT 'bu_user_info.id', `identity_type` varchar(32) NOT NULL COMMENT '账号类型(mobile:手机号,wx-unionid:微信unionid,wx-openid-miniapp:微信小程序openid,wx-openid-mp:微信公众号openid,email:邮箱,Username:用户名,sina:新浪微博,qq:QQ)', `identifier` varchar(32) NOT NULL COMMENT '手机号、邮箱、用户名或第三方应用的唯一标识', `certificate` varchar(255) DEFAULT NULL COMMENT '凭证(站内的保存密码,站外的不保存或保存token)', `remark` varchar(255) DEFAULT NULL COMMENT '备注', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE KEY `uniq_ui_it` (`user_id`,`identity_type`), UNIQUE KEY `uniq_identifier_it` (`identifier`,`identity_type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户认证表';

怎么样?如果你觉得有用的话,还不快快收藏起来!!!

附:涉及的代码目录

github:https://github.com/897665787/springcloud-template

gitee:https://gitee.com/jq_di/springcloud-template

springcloud-template └── template-auth └── authentication └── LoginService -- 登录抽象定义 └── AppWeixinService -- APP微信授权登录 └── LocalMobileService -- 本机号码一键登录 └── MobileCodeBindService -- 手机号 验证码登录并绑定授权码 └── MobileCodeService -- 手机号 验证码登录 └── UsernamePasswordService -- 用户名 密码登录 └── WeixinMiniappService -- 微信小程序登录 └── WeixinMpService -- 微信公众号登录 └── LoginType -- 多种登录方式定义 └── controller └── AccountController -- 登录API └── token └── TokenService -- token抽象定义 └── template-framework-edge └── interceptor └── AccessControlConfigurer └── AccessControlInterceptor -- 根据header有无用户ID拦截需登录API └── template-zuul或template-gateway └── filter └── TokenFilter -- 解析token获取用户ID并将设置到header,

图文教程
相关文章
热门专题
推荐软件
奇热小说
奇热小说
下载
QQ2019手机版
QQ2019手机版
下载
王者荣耀
王者荣耀
下载
百度浏览器迷你版
百度浏览器迷你版
下载
2345浏览器手机版
2345浏览器手机版
下载
网易邮箱
网易邮箱
下载
爱奇艺
爱奇艺
下载
网易云音乐
网易云音乐
下载
WPSOffice
WPSOffice
下载
优酷
优酷
下载
谷歌浏览器(Chrome)
谷歌浏览器(Chrome)
下载
迅雷看看播放器
迅雷看看播放器
下载
UC浏览器
UC浏览器
下载
QQ音乐
QQ音乐
下载
阿里旺旺买家版v9.12.10C官方版
阿里旺旺买家版v9.12.10C官方版
下载
360安全卫士v12.1官方版
360安全卫士v12.1官方版
下载
猜你喜欢
Blued国际版
Blued国际版
下载
我要锁屏
我要锁屏
下载
终极银河英雄之战
终极银河英雄之战
下载
超值线报
超值线报
下载
鹿米学园
鹿米学园
下载
九州掌上开户app
九州掌上开户app
下载
暗影轰炸机
暗影轰炸机
下载
游戏内字体修饰插件Fonter
游戏内字体修饰插件Fonter
下载
非定不可app
非定不可app
下载
养猪场MIX
养猪场MIX
下载
添添办公
添添办公
下载
塔王群英传ios版
塔王群英传ios版
下载
墓地保卫战
墓地保卫战
下载
Nuts录屏电脑版
Nuts录屏电脑版
下载
骑马与砍*2北方的愤怒MOD
骑马与砍*2北方的愤怒MOD
下载
威利杰特曼猴子宇航员的复仇修改器
威利杰特曼猴子宇航员的复仇修改器
下载