2016-03-30 3 views
0

Я пытаюсь создать систему ключей на моем сервере, которая позволяет пользователю перейти на страницу, если они ввели действительный ключ в качестве параметра GET. Если ключ недействителен или если ключ не введен, они будут перенаправлены на страницу с недопустимым ключом, как показано ниже.Система проверки подлинности бутылочной бутылки Python не работает после того, как один человек входит в ключ?

@route('/test/invalidkey')#key is invalid! 
def index(): 
    return "Sorry, your API key is invalid! Message the admin if this is a problem." 

На всех маршрутах есть параметр apply=[require_key].

@route('/test/count', method='GET', apply=[require_key]) 

Вот require_key метод:

def require_key(fn):#check if api key is valid 
    if not request.query.key: 
     redirect('/test/invalidkey') 
    return fn 

Прямо сейчас нет ключа API. На данный момент я просто проверяю, был ли добавлен параметр «key = hey», добавленный в URL-адрес.

Моя проблема: всякий раз, когда кто-то пытается получить доступ к странице без ключа api в первый раз, он перенаправляет на недействительную ключевую страницу, как это предполагалось. Когда кто-то впервые обращается к ключу, они поступают так, как предполагается. Но ... когда кто-то обращается к странице без ключевого параметра после того, как они уже получили доступ к странице, к ней уже был обращен ключевой параметр, они могут получить доступ к странице, даже не имея ключевого параметра GET. Почему это происходит?

Если даже один человек обращается к нему с ключом, любой, кто обращается к нему без ключа, разрешен. Является ли этот ключевой параметр GET сохраняемым и упоминается снова каждый раз? Если да, то как мне его очистить?

Я прочитал документацию по бутылке, но есть только небольшой блок текста, объясняющий параметр apply и то, что он делает. Это не касается каких-либо дополнительных деталей.

ответ

0

Я нашел решение, используя сообщение этого парня в блоге. Вам нужно будет использовать обратную машину для доступа к ней.

http://tumblr.kurttheviking.com/post/13053496552/using-decorators-to-require-sign-in-with-bottle-py

Метод require_key должен выглядеть следующим образом:

def require_uid(fn): 
    def check_uid(**kwargs): 
     cookie_uid = request.get_cookie('cookieName', secret='cookieSignature') 

     if cookie_uid: 
      //do stuff with a user object 
      return fn(**kwargs) 
     else: 
      redirect("/loginagain") 

    return check_uid