赞
踩
“
从今天开始,准备从头开始搭建一个基于flask的鉴权系统,一点一滴,积累于生活”
从登陆开始
01.
知识树
本文涉及到如下知识点
1. flask-login的简单使用
2. 本地鉴权实践
3. GitHub鉴权登陆实践,flask-github使用
4. 可扩展的表结构设计思路
02.
表结构设计
我们首先设计一个User用户表,里面的字段可以包括username,password,email等用户信息,大致如下usernamepasswordemailuser1p1user1@gmail.com
user2p2user2@gmail.com
user3p3user3@gmail.com
因为我们还会涉及到第三方登陆,那么为了后面便于扩展,再设计一张表,就命名为ThirdAuth,里面可以包括user_id,与user表关联,oauth_name,oauth_access_token等字段user_idoauth_nameoauth_access_tokenuser-id1auth1token1
user-id2auth2token2
user-id3auth3token3
这样,oauth_name字段可以用来存储第三方来源,例如github,以此来区别不同的第三方登陆用户。
到此,一个简单的表结构就设计好了。
03.OAuth鉴权
简单来说,为一个网站添加第三方登录指的是提供通过其他第三方平台账号登入当前网站的功能。比如,使用QQ、微信、新浪微博账号登录。对于某些网站,甚至可以仅提供社交账号登录的选项,这样网站本身就不需要管理用户账户等相关信息。对用户来说,使用第三方登录可以省去注册的步骤,更加方便和快捷。这里,我就是使用GitHub的OAuth认证来进行鉴权登陆。
这里首先需要在自己的GitHub上创建一个OAuth程序,非常简单,访问这个地址:https://github.com/settings/applications/new,按照要求填写即可。
其中的callback需要填写一个回调函数,具体后面再说。
创建好这个OAuth程序后,我们就会获得Client ID(客户端ID)和Client Secret(客户端密钥),在后面调用Github的API时使用。
04. 本地鉴权
1. 创建表结构
根据刚才的表结构设计,对于本地鉴权,可以在models.py文件中创建一个WebUser类,定义对应的数据库字段。
对于password,不建议直接在数据库中存储明文,所以这里使用了werkzeug库来做hash转换。
同时WebUser类还继承自flask-login的UserMixin类,该类实现了关键的用于检测用户状态的方法:
is_authenticated,如果用户已经登陆返回True,否则返回False
is_active,如果用户允许登陆,返回True,否则返回Flase
is_anonymous,对普通用户必须返回False
get_id,必须返回用户的唯一标识
后面主要使用到了
is_authenticated方法。
而init_user是用来初始化第一个用户的,password等几个方法分别是用来检测密码是否正确的。
class
WebUser
(UserMixin,db.Model):
__tablename__=
"webuser"
id=db.Column(db.Integer,primary_key=
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。