2015-08-27 7 views
-1

У меня есть декоратор authenticated_resource, который предотвращает доступ к некоторым маршрутам, если пользователь не вошел в систему. Я также хотел бы предотвратить доступ, если истечение срока действия токена прошло (где token_dict['token']['token_expires'] = '2015-08-27T07:51:43Z'). Как мне это сделать?Перенаправление на страницу входа в систему, когда токен аутентификации истек.

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_dict = getToken(username, password) 
      token=token_dict["token"]["id"] 
      session['authenticated'] = True 
      session['auth_token'] = token  
      return redirect(url_for('getstats')) 

    return render_template('login.html', error=error) 

ответ

1

Сохраните дату истечения срока (в строковой форме) на сессии. Проверьте его на текущее время и проверьте, существует ли токен в декораторе.

from datetime import datetime 

... 
def login(): 
    ... 
      session['token_expires'] = token_dict['token']['token_expires'] 
    ... 

def authenticated_resource(function): 
    @wraps(function) 
    def decorated(*args, **kwargs): 
     if 'auth_token' not in session: 
      abort(403) 

     now = datetime.utcnow() 
     expires = datetime.strptime(session['token_expires'], '%Y-%m-%dT%H:%M:%SZ') 

     if expires <= now: 
      abort(403) 

     return function(*args, **kwargs) 

    return decorated 
Смежные вопросы