Toa*_*ast 3 python session flask flask-login
我正在使用Flask-Login创建一个烧瓶服务器,如下所示:
登录工作(它打印正确的用户).在此之后,我提出了测试请求.它总是返回一个匿名用户,每次都返回一个不同的用户(希望看到刚刚登录的用户).
这些请求是由同一(本地)ip上的http服务器上的html页面发出的,但是与烧瓶服务器不同.
这是我的python文件,使用crossdomainflask:
from flask import *
from flask.ext.login import (LoginManager, UserMixin, login_user, current_user)
from crossdomainflask import *
class User(UserMixin):
def __init__(self, username):
self.name = username
@property
def id(self):
return self.name
class FlaskServer(object):
def __init__(self):
self.login_manager = LoginManager()
self.server = Flask(__name__)
self.server.secret_key = '123456'
self.server.config.update(PROPAGATE_EXCEPTIONS = True)
self.login_manager.init_app(self.server)
@self.login_manager.user_loader
def load_user(userid):
return User("test")
@self.server.route('/api/login', methods=['POST'])
@crossdomain(origin='*')
def login():
user = load_user(request.values.get('username'))
if user:
login_user(user)
print(current_user)
print(current_user.name)
return 'ok'
@self.server.route("/api/test", methods=['POST', 'GET'])
@crossdomain(origin='*')
def test():
print(current_user)
return 'ok'
self.server.run("0.0.0.0")
server = FlaskServer()
Run Code Online (Sandbox Code Playgroud)
dav*_*ism 14
如果您阅读Flask-Login的文档,您将看到需要定义一个用户加载器,用户在登录后在后续请求中重新加载用户.
@login_manager.user_loader
def user_loader(id):
# do whatever you need to to load the user object
# a database query, for example
user = MyUser.query.get(id)
return user
Run Code Online (Sandbox Code Playgroud)
问题还可能是,使用Flask-Login设置的登录cookie,跨域行为不正常.您可能需要更改cookie的域或其他安全功能以允许此操作.但是,这不是允许从其他站点登录的正确方法.
您发布的代码还有其他问题.
不需要服务器类,Flask中的所有模式都设计为在模块级别工作.所有状态都可以保存在应用程序及其配置中,并代理current_app.
在开发服务器(app.run())仅仅是为了当地的发展.如果要部署在生产,使用真正的应用服务器,比如uWSGI或Gunicorn,和一个真正的Web服务器,如Nginx的或Apache的.它们比开发服务器提供了无限的性能和安全性.
暴露API并不坏,但直接暴露登录是不好的.您设置它的方式,远程站点必须收集并发送凭据.考虑设置OAuth提供程序,以便只有您的站点处理凭据.该协议栈交易所API提供了这个工作流程的一个很好的例子,而且有各种瓶的扩展,如烧瓶OAuthlib,实现这一点.
你不应该使用MD5哈希密码,它已经十年来一直非常不安全.使用真正的哈希实现,如PBKDF2,BCrypt或SCrypt.Passlib为这些算法提供了一个优秀的界面,以及随着时间的推移升级哈希的能力.
| 归档时间: |
|
| 查看次数: |
3930 次 |
| 最近记录: |