您的位置:首页 > 理论基础 > 计算机网络

python HTTPBasicAuth和flask_login验证的区别

2016-04-11 22:14 489 查看
最近写了一个Flask-Restful框架的项目,原本用的是HTTPBasic模块的验证,后来发现这种验证框架应用在前端特别难写,于是采用了flask_login

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,是拒绝访问的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: