flask如何记录登录状态

发布于 2022-09-04 00:23:57 字数 1781 浏览 21 评论 0

我用flask做了一个简单的站点,希望导航栏所有链接都不能直接访问,而是需要经过登录验证才能访问,为此,我每一个route节点都添加了@login_required,但是发现一个问题,每次访问导航栏都需要进入了登录页面,登录一次,我希望一次登录,所有页面都能访问,该怎么做?

import logging
import os
import psutil
import socket
#import MySQLdb
from datetime import datetime, timedelta
import uuid
import locale
from download import logdir
from flask import Flask, render_template, request, session, jsonify, Response, Blueprint, current_app, g, send_from_directory, flash, redirect, url_for
from flask_login import login_required, current_user, LoginManager, login_user
from werkzeug.local import LocalProxy
from psdash.helpers import socket_families, socket_types

logger = logging.getLogger('psdash.web')
webapp = Blueprint('psdash', __name__, static_folder='static')

webapp.SECRET_KEY='\xf8\xa1\x01v\xeb8\xe7n\xdchI{y\xef:~\x1d\x1d\xf9\x05_\x04\xbb\x07'
webapp.USERNAME='admin'
webapp.PASSWORD='admin'

@webapp.route('/login', methods=['GET', 'POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != webapp.USERNAME:
            error = 'Invalid username'
        elif request.form['password'] != webapp.PASSWORD:
            error = 'Invalid password'
        else:
            session.permanent = True
            session['username'] = request.form['username']
            flash('You were logged in')
            return redirect(url_for('psdash.index'))
    return render_template('login.html', error=error)
@webapp.route('/logs')
@login_required
def view_logs():
    available_logs = current_service.get_logs()
    available_logs.sort(cmp=lambda x1, x2: locale.strcoll(x1['path'], x2['path']))

    return render_template(
        'logs.html',
        page='logs',
        logs=available_logs,
        is_xhr=request.is_xhr

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

错爱 2022-09-11 00:23:57

首先要在login视图函数使用login_user方法,然后还要自己实现load_user回调,see here. 这样才能使用flask-login的login_required装饰器。

或者自定义login_required装饰器,检查session['username']?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文