标签: flask-login

flask-login:无法理解它是如何工作的

我试图了解它是如何Flask-Login工作的.

我在他们的文档中看到他们使用预先填充的用户列表.我想玩数据库存储用户列表.

但是,我不明白这个Flask-Login模块中的一些内容.

@login_manager.user_loader
def load_user(userid):
    #print 'this is executed',userid
    return user(userid, 'asdf')
Run Code Online (Sandbox Code Playgroud)

每次请求都会调用此代码?这用于加载我的用户对象的所有细节?

现在,我有这个代码:

@app.route('/make-login')
def make_login():
    username = 'asdf'
    password = 'asdf'
    user_data = authenticate(username, password)
    user_obj = user(user_data[0], user_data[1])
    login_user(user_obj)
    return render_template('make-login.html')
Run Code Online (Sandbox Code Playgroud)

当我访问/登录时,我想登录.

我的用户类:

class user(object):
    def __init__(self, id, username, active=True):
        self.username = username
        self.id = id
        #self.active = active
    def is_authenticated(self):
        return True  

    def is_active(self):
        return True

    def is_anonymous(self):
        return False

    def get_id(self):
        return 5
Run Code Online (Sandbox Code Playgroud)

另外,我为验证/注册写了另外两个函数

def authenticate(username, password):

    cursor = db.cursor() …
Run Code Online (Sandbox Code Playgroud)

python mysql flask-login

66
推荐指数
4
解决办法
5万
查看次数

如何在烧瓶中使用g.user global

据我了解Flask中的g变量,它应该为我提供一个存储数据的全局位置,例如在登录后保存当前用户.它是否正确?

我希望我的导航在整个站点登录后显示我的用户名.

我的观点包含

from Flask import g #among other things
Run Code Online (Sandbox Code Playgroud)

在登录期间,我分配

user = User.query.filter_by(username = form.username.data).first()
if validate(user):
    session['logged_in'] = True
    g.user = user
Run Code Online (Sandbox Code Playgroud)

我似乎无法访问g.user.相反,当我的base.html模板具有以下内容时......

<ul class="nav">
    {% if session['logged_in'] %}
        <li class="inactive">logged in as {{ g.user.username }}</li>
    {% endif %}
</ul>
Run Code Online (Sandbox Code Playgroud)

我收到错误:

jinja2.exceptions.UndefinedError
UndefinedError: 'flask.ctx._RequestGlobals object' has no attribute 'user'
Run Code Online (Sandbox Code Playgroud)

登录否则工作正常.我错过了什么?

python jinja2 flask flask-login

56
推荐指数
2
解决办法
5万
查看次数

Flask-Login检查用户是否在没有装饰器的情况下进行了身份验证

在Flask-Login文档中,它描述了系统用户如何需要经过身份验证的用户模型来访问使用装饰器语法的方法:

from flask_login import login_required    

@app.route("/settings")
@login_required
def settings():
    pass
Run Code Online (Sandbox Code Playgroud)

现在这一切都很好,但我希望能够检查用户是否登录了一个方法,如下所示:

@app.route('/main/', methods=['GET', 'POST'])
main_route():
    if request.method == 'GET':
         if user_is_authenticated():    #Do the authentication here
             #load authenticated /main/ html template etc.
             pass
         else:
             #load unauthenticated /main/ html template etc.
             pass
    ...
Run Code Online (Sandbox Code Playgroud)

这样做的原因是因为它将GET和POST请求分解,而不是为经过身份验证的用户和未经身份验证的用户复制路由.
我怎样才能做到这一点?可能吗?

python flask flask-login

35
推荐指数
1
解决办法
2万
查看次数

ImportError:没有名为flask.ext.login的模块

我的flask_login模块有问题.

我已经成功安装了flask_login模块.同样从命令提示符,我可以轻松地运行此脚本,没有错误:

Python 2.7 (r27:82525, Jul  4 2010, 07:43:08) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from flask.ext.login import LoginManager
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个脚本时:

from flask import Flask
from flask.ext.login import LoginManager
app = Flask(__name__)

@app.route("/")
def hello():
    return "Hello World! Welcome"

if __name__ == "__main__":
    app.run()
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ImportError: No module named flask.ext.login
Run Code Online (Sandbox Code Playgroud)

我在做什么错.我对这个烧瓶很新.提前致谢.

python flask flask-login

29
推荐指数
4
解决办法
4万
查看次数

使用flask_login会话和jinja2模板

我有简单的jinja2模板和注册/登录链接,我应该在用户登录时隐藏它们,我也使用flask_login模块来处理这个问题.

问题是:如何识别用户是否登录jinja2模板?

python jinja2 flask python-2.7 flask-login

21
推荐指数
1
解决办法
1万
查看次数

Flask-Login密码重置

我正在使用该flask-login库,我无法找到任何关于如何允许用户通过电子邮件重置密码的好教程或文档.我可以看看如何做到这一点的方向/资源?彻底的谷歌搜索没有透露任何有用的东西.

flask flask-sqlalchemy flask-login

19
推荐指数
3
解决办法
1万
查看次数

Flask永久会话:在哪里定义它们?

默认情况下,Flask使用volatile会话,这意味着会话cookie设置为在浏览器关闭时过期.为了使用永久会话,这将使用具有已定义的到期日期的cookie,应该设置session.permanent = True,如本问题中所述.,将根据以下内容设置到期日期config['PERMANENT_SESSION_LIFETIME'].

我很惊讶会话生存期在配置文件中定义,但是无法通过配置请求使用永久会话,例如a config['USE_PERMANENT_SESSION'] = True.但就是这样吧.

我的问题是:如果你确实想要永久性会议,那么定义它们的最佳位置是什么?它是否@app.before_request在上述问题中提出的功能中?但是这意味着每次请求都会重新设置它?似乎一旦确定,session.permanent直到会议结束时仍然如此.

永久会话通常在登录后使用,因此请求处理时最好的地方是处理login_user()?那么对所有匿名页面使用易失性会话cookie的最佳策略是什么,并通过session.permanent = True登录切换到永久会话?

人们可能希望根据它是普通的sessioncookie还是remember_mecookie 来设置不同的生命周期.实现这一目标的最佳方法是什么?

python cookies session flask flask-login

18
推荐指数
3
解决办法
9047
查看次数

如何在flask-login中跟踪当前用户?

我试图在flask-login的视图中使用当前用户.所以我试着g object

我分配flask.ext.login.current_user给g对象

@pot.before_request
def load_users():
   g.user = current_user.username
Run Code Online (Sandbox Code Playgroud)

如果用户是正确的,它可以工作.但是当我使用错误的凭据进行注册或登录时,我收到此错误

AttributeError: 'AnonymousUserMixin' object has no attribute 'username'

请问我在哪里错了...

python flask python-2.7 flask-login flask-extensions

17
推荐指数
3
解决办法
5万
查看次数

使用多个用户类实现Flask-Login

我正在编写一个具有多个用作用户的类的应用程序(例如,学校帐户和员工帐户).我正在尝试使用Flask-Login来实现这一点,但我不太清楚如何制作它,以便当用户登录时我可以让我的应用程序检查用户名是否属于学校帐户或员工帐户,然后适当登录.

我知道如何确定它属于哪种类型的帐户(因为所有用户名必须是唯一的).但在那之后,我不知道如何告诉应用程序我希望它登录该特定用户.

现在,我只有一个通用登录页面.如果我为员工帐户和学校帐户创建单独的登录页面,会更容易吗?我通过Flask-SQLAlchemy使用MySQL数据库.

python flask flask-sqlalchemy flask-login

16
推荐指数
3
解决办法
2万
查看次数

py.test来测试烧瓶寄存器,AssertionError:弹出错误的请求上下文

我正在使用烧瓶进行注册和登录:

from flask.ext.security.views import register, login

class Register(Resource):
    def post(self):
        return register()

class Login(Resource):
    def post(self):
        return login()

api.add_resource(Login, '/login')
api.add_resource(Register, '/register')
Run Code Online (Sandbox Code Playgroud)

然后我使用py.test来测试类:

class TestAPI:
    def test_survey(self, app):
        client = app.test_client()
        data = {'email': 'test@test', 'password': 'password'}
        rv = client.post('/2014-10-17/register',
                          data=json.dumps(data))
        ...
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,错误发生如下:

AssertionError: Popped wrong request context.  (<RequestContext 'http://localhost/2014-10-17/register' [POST] of panel.app> instead of <RequestContext 'http://localhost/' [GET] of panel.app>)
Run Code Online (Sandbox Code Playgroud)

你知道为什么吗?在测试登录时,没有这样的错误

python pytest flask-login

16
推荐指数
2
解决办法
6213
查看次数