不使用 redis,关于邮箱验证码过期实现,请教一下?

2018-08-30 09:28:37 +08:00
 YiweiHangzhi

也是一个业务需求,如题,有曾经实现过的大佬嘛?能否给个例子或文章链接参考一下

5594 次点击
所在节点    程序员
52 条回复
Mazexal
2018-08-30 09:30:23 +08:00
存数据库
Light3
2018-08-30 09:44:30 +08:00
mysql 存一条 里面有个过期时间 不就完了吗
rockyou12
2018-08-30 09:45:15 +08:00
数据库存过期时间,然后程序轮询
tlday
2018-08-30 09:48:26 +08:00
不需要轮询让他失效,用的时候查一下是不是在有效期内就可以了。
matzoh
2018-08-30 09:49:21 +08:00
@rockyou12 这是有多笨的方法。。 存个时间不就行了。。
batter
2018-08-30 10:04:05 +08:00
表里面添加一条数据,设置过期时间就可以了
ieiayaobb
2018-08-30 10:09:25 +08:00
我们之前有一种很 trick 的做法是用 JWT,也有 ttl,可以在验证签名的时候校验
Shynoob
2018-08-30 10:10:20 +08:00
相比问题我更好奇为什么不使用 redis
tomfs
2018-08-30 10:14:50 +08:00
简单需求没必要弄卡车来跑吧,memcached 就足够了吧
Zzdex
2018-08-30 10:15:58 +08:00
用 jwt
willchen
2018-08-30 10:18:52 +08:00
嗯 jwt 可以,大致就是把过期时间 加密后 作为参数
rockyou12
2018-08-30 10:27:36 +08:00
@matzoh 过期的时候可能需要触发其他业务,只存时间很多时候都不行。redis 本身 key 可以设置过期时间,而且可以订阅其事件达到一过期就自动触发业务,你只用数据库那不就只能轮询了。
Hayek
2018-08-30 10:29:41 +08:00
@rockyou12 如果我带的程序员这么写需求,会被打死。

@Shynoob 如果一个很小的系统,仅仅这一个新需求,有必要上 Redis 吗?增加一个新的数据库,要不要人来日常维护。

@willchen 为了用 jwt 而用 jwt,如果只给用户邮箱里发一个验证码,jwt 如何给用户?
alwayshere
2018-08-30 10:35:43 +08:00
用数据库存时间也是醉了,你把时间用个可逆式加密的函数写进验证码不就行了吗,后端验证的时候解密验证时间不就行了
lerry
2018-08-30 10:37:15 +08:00
base64(过期时间$用户 id$sha1(过期时间+用户 id+secret_key))

请求的时候,服务器拆开过期时间和用户 id(或者 token) 和哈希值,检查时间是否到期,对过期时间、用户 id、密钥做哈希,检查是否一致

并不需要用数据库
rockyou12
2018-08-30 10:38:18 +08:00
@Hayek 我又不是写需求,我是在解释为什么用 redis 比较好,还有为什么数据库轮询可以达到一样的效果。领导当惯了口气不小啊?(´・_・`)
rockyou12
2018-08-30 10:40:04 +08:00
@lerry 其实感觉和 jwt 差不多了……
Hayek
2018-08-30 10:40:23 +08:00
@rockyou12 哈哈,抱歉了,不是领导,底层码农而已,偶尔带新人。您说的情况下确实 redis 好,然而楼主并没有说过期之后要触发什么需求,我只是不太喜欢过度优化,简单需求复杂化而已。
choice4
2018-08-30 10:49:16 +08:00
guava 呢
Shynoob
2018-08-30 10:50:28 +08:00
@Hayek 回复一下楼主,好巧我上周也写了一个同样的功能,最后选的还是 redis 的方案,方便

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/484442

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX