Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果令牌未在flask中过期或退出,如何跳过登录页?_Python_Flask_Flask Login - Fatal编程技术网

Python 如果令牌未在flask中过期或退出,如何跳过登录页?

Python 如果令牌未在flask中过期或退出,如何跳过登录页?,python,flask,flask-login,Python,Flask,Flask Login,如果flask会话中已有令牌退出,如何跳过登录页。在def login():中,我从auth.get_token()方法获得了令牌。若令牌是退出,那个么我将如何跳过登录页面 from flask import session def authenticated_resource(function): @wraps(function) def decorated(*args, **kwargs): if session.get("authenticated"): retur

如果flask会话中已有令牌退出,如何跳过登录页。在
def login():
中,我从
auth.get_token()
方法获得了令牌。若令牌是退出,那个么我将如何跳过登录页面

from flask import session
def authenticated_resource(function):
@wraps(function)
def decorated(*args, **kwargs):
    if session.get("authenticated"):
        return function(*args, **kwargs)
    return abort(403) # unauthenticated
return decorated

@app.route('/login', methods=['GET', 'POST'])
def login():
  error=None
  if request.method=='POST':
    if request.form['username']!='admin' or request.form['password']!='1234':
      error ='Invalid Credentials. Please try again.'
    else:
      username=request.form['username']
      password=request.form['password']      
      token =auth.get_token(username, password)
      session["authenticated"] = True
      session["auth_token"] = token     
      return redirect(url_for('getstats'))
  return render_template('login.html', error=error)


@app.route('/logout')
def logout():
  session.pop("auth_token", None)
  session.pop("authenticated", None)
  return redirect(url_for('login'))



@app.route('/metering')
@authenticated_resource
def getstats():
    token =session.get("auth_token")
    print 'token in metering=',token
    return render_template('metering.html', title='Resource Usage')

下面是一个可能会有所帮助的建议(我添加了一个重定向到登录页面的UX建议,如果您喜欢一般的403错误响应,可以忽略此建议):

from flask import redirect, session, url_for
from functools import wraps

def authenticated_resource(function):
    @wraps(function)
    def decorated(*args, **kwargs):
        if (session == None or 'authenticated' not in session or not
            session['authenticated']):
            return redirect(url_for('.login', next=request.url))
        return function(*args, **kwargs)
    return decorated