python HTTPBasicAuth和flask_login验证的区别
2016-04-11 22:14
489 查看
最近写了一个Flask-Restful框架的项目,原本用的是HTTPBasic模块的验证,后来发现这种验证框架应用在前端特别难写,于是采用了flask_login
HTTPBasic应用框架如下
verify_password是回调函数,在有login_required修饰的函数时会调用这个函数。那么在调试的时候,可以用curl这个工具进行调试
HTTPBasic应用框架如下
auth = HTTPBasicAuth() @auth.verify_password def verify_password(username_or_token, password): if user.verify_password(password): return True @app.route('/') @auth.login_required(): def login(): pass
verify_password是回调函数,在有login_required修饰的函数时会调用这个函数。那么在调试的时候,可以用curl这个工具进行调试
curl -u username:passwd http://<localhost:5000>/login[/code]
但是问题在于如果加上了前端,就会有问题,因为这会导致每次访问这个页面都需要跳转到一个登陆页面进行登陆验证
所以我最后采用flask_login框架 [中文文档](“http://docs.jinkan.org/docs/flask-login/#id6“)
flask_login框架login_manager = LoginManager() login_manager.setup_up(app) class User(db.Model): id = db.Column(db.Integer, primary_key = True) user = db.Column(db.String(40)) passwd = db.Column(db.String(40)) # password need to be hashed before installed num_mcs = db.Column(db.Integer) def is_authenticated(self): return True def is_active(self): return True def get_id(self): return unicode(self.id) @login_manager.user_loader def load_user(id): return User.query.get(int(id)) def login(): if 1==1: # 这里只是用来测试的 user = User() db.session.add(user) db.session.commit() login_user(user) return redirect(url_for('index')) @app.route("/index", methods=['GET']) @login_required def index(): # 函数需要跟链接地址同名 return render_template("index.html")
load_user是一个回调用函数,当需要验证的时候便会调用它。
login_required是一个修饰器,它会判断当前的用户是否有效,从而是否能够连接到下面的地址。
问题出现了,这个是很难用curl进行调试的,curl每执行一次都会断开连接,下次连接的时候相当于又是一个新用户。而这里需要进行的是长连接,所以只能通过浏览器进行操作调试。
在浏览器下输入: http://localhost:5000/login/
便会自动跳转到http://localhost:5000/index下。
但是如果重新打开浏览器,输入http://localhost:5000/index,是拒绝访问的
相关文章推荐
- 腾讯公司数据分析岗位的hadoop工作 线性回归 k-means算法 朴素贝叶斯算法 SpringMVC组件 某公司的广告投放系统 KNN算法 社交网络模型 SpringMVC注解方式
- 腾讯公司数据分析岗位的hadoop工作 线性回归 k-means算法 朴素贝叶斯算法 SpringMVC组件 某公司的广告投放系统 KNN算法 社交网络模型 SpringMVC注解方式
- flex学习进度7之网络访问
- nat的default网络重新开启
- [Java拾遗二]Tomact及Http 部分总结.
- Linux下的socket网络编程
- TCP的三次握手建立连接与四次挥手释放连接
- linux 下使用 tc 模拟网络延迟和丢包
- POJ 1274 The Perfect Stall 网络流 二分图匹配
- Java_SE11-TCP通信,UDP通信
- 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)
- sigmoid
- android 使用OkHttp上传多张图片
- 使用java开源工具httpClient及jsoup抓取解析网页数据
- Python网络爬虫——模拟登陆爬取网站数据并加载到excl表格里
- acdream oj 1211 有上下界的网络流
- 计算机网络面试
- 使用HttpClient连接池进行https单双向验证
- 【C#】 知乎用户网络爬虫
- 4.传输控制协议(TCP):进程到进程的通信