邮件密码找回功能实现
Jun 4 2015思路
公司做项目,有用到注册,登录,密码找回等功能,以前自己写的论坛也实现了邮件密码找回,不过比较简单,直接生成随机密码,把新密码发送到用户邮箱.比较不安全,要实现一般网站的用链接找回的功能.
对链接的要求有如下:
- 每次生成的链接都必须不一样;
- 链接要有过期时间,过期以后无效;
- 后台在链接被请求时,必须验证链接是否有效.
公司做项目,有用到注册,登录,密码找回等功能,以前自己写的论坛也实现了邮件密码找回,不过比较简单,直接生成随机密码,把新密码发送到用户邮箱.比较不安全,要实现一般网站的用链接找回的功能.
对链接的要求有如下:
开始写Django forum的RESTful api,首先解决用户认证的问题,使用OAuth2.0协议实现。
OAuth2.0协议定义了4种授权模式,为了学习OAuth2.0授权协议,这里只实现简化模式。以下为简化模式授权过程。
理解RESTful架构
RESTful API 设计指南
来自HeroKu的HTTP API 设计指南(中文版)
REST == Representational State Transfer,意思是表现层状态转化,我们来分解这个概念。
从字面以上理解这是一个操作的过程,实际上它省略了主语资源(Resources),合起来就是资源的表现层状态转化。
Django forum在SAE上开启了5M的memcached缓存空间,memcached是用空间计费的,所以在没什么流量的情况下每天也要用1云豆,以blog上的经验来看不用缓存的情况下mysql的消耗又比较大,所以权衡之后选择SAE自己实现的kvdb缓存后端来做缓存,这样缓存消耗的云豆可以忽略不计,又可以达到缓存加速的效果。
参考Django自带的memcache缓存后端来写kvdb的缓存后端。在插入数据的时候添加一个超时时间戳,获取数据的时候判断数据是否超时,如超时则删除数据。另外在实现清空所有数据的时候kvdb没有实现相应的方法,我自己阅读kvdb文档后通过迭代key值来实现清空,有一个可能的问题是这个迭代删除最多只能一次删除100条数据。
基于django.core.cache.backends.base.BaseCache
,对kvdb已有的接口进行重写适配,kvdb未实现的接口则沿用。
RSS Factory前段时间又出问题了,访问微信公众号RSS一直500,完全没法用了。
经调试,发现由于爬取数据太频繁,触发了搜狗微信公众号的反爬虫,探索了下反爬虫的规则: