基于验证码登录
1.检查验证码
数据库建一个存储验证码的表,img_code,它的字段包括:
1.1获取验证码
提供获取验证码接口,给前端使用。
有相关的验证码生成工具包和类,配置验证码规则,比如验证码长度、大写字母、小写字母、符号、数字组合,是否可重复等规则。
生成验证码和uuid,入库,并返回前端。
1.2保存验证码
当生成新的验证码和uuid时,存入数据库。并返回给前端。
1.3校验验证码
当有用户登录时,除了用户的登录信息外,需要回传验证码的uuid和code。
用回传的uuid查询验证码的表,是否能查询到记录,比较查询结果的code是否一致。
还要检查当前请求的时间和验证码生成时间是否超过了我们设置的时间,比如三分钟,超过了则验证码无效。
用户登录时还要求回传用户的ip和设备id,如果前端用户没有回传验证码uuid和code,则需查询用户最后一次登录的ip和设备id与本次登录是否相同,相同则不需要验证码。不同则必须要提交验证码。
1.4删除无效验证码
1.可以通过自动定时任务,在凌晨删除过期验证码。过期时间自己定,比如早于当前系统时间,过期一天的就是无效的,过期三小时就是无效等等。
2.还有一种很LOW的方式,就是在每次获取验证码的时候,判断当前系统时间是否为凌晨时间段,如果是,则删除无效验证码。
2.检查用户是否被锁定
通过验证码后,需要查询用户登录记录表,里面存储着用户的每次登录信息,我们最关注的是用户最近一次登录信息。
判断用户账号是否被锁定,登录失败次数是否超过限制,和最后一次登录时间,如果失败次数超过了限制,我们可以根据设置的限制(比如15分钟后再登录)时间,系统当前时间和最后一次登录时间,三者关系,来告知用户多少分之后才可以再次登录。
3.最后进行账号密码正确性校验
通过登录限制,最后进行账号密码正确性检查。
基于手机号短信登录
数据库创建一个存储基于短信或邮箱验证码的表,用于存储信息。
1.获取短信接口
1.根据入参手机号,查询该用户,此种类型的短信,是否有大于未使用短信验证码限制数(比如10条),如果大于,则提示该用户超出了短信当天最大次数,不再发送短信验证码。
2.生成随机验证码内容,保存进数据库。
2.组装短信
拼装短信对象,调用本公司系统的短信服务的接口,由短信服务组装第三方短信模板,保存进数据库表,形成待发送短信的队列。
3.发送短信
另外再启动一个自动任务,设置时间间隔,不停地查询短信队列表,调用第三方付费短信接口,发送短信。
4.短信验证码登录
用户输入验证码点击登录,携带验证码到服务单,先检查验证码是否存在,是否未使用,是否过期。
然后校验用户名密码是否正确。
基于微信授权登录
创建微信授权表
用户使用微信授权登录,微信平台会调用我们的controller层接口,传递微信参数到我们接口。字段如下:
private String nickname; private String openid; private String unionid; private String headimgurl; private String accessToken; private String refreshToken; private String platform; private String device_id;
我们通过unionid字段,查询微信授权表,判断我们是否绑定了我系统账号,可以用手机号或者我方账号做关联关系。
如果未绑定,则登录失败。
如果已绑定,则更新微信授权表信息。
根据授权表记录中的账号,查询我方会员表信息。
成功,则保存用户登录记录。
保存授权登录记录。
来源:oschina
链接:https://my.oschina.net/xiaoyoung/blog/3159597