2016-08-19 4 views
0

Я использую фляжку, флеш-лимитер и AngularJS для своего веб-приложения. Все работает нормально, но то, что я хочу, слишком вернуло слишком много сообщений о запросе на интерфейсе, но я могу «т, кажется, сделать это, потому что OPTIONS методы блокирует все, как только он возвращает 429Флакон CORS и Ограничитель фляг

Мой AngularJS ошибочный код:

function(response){ 
    var res_data = (response.data && response.data.data) ? response.data.data : null; 
    var res_status = response.status; 
    FlashService.Error(response[keys.issue_fields], true); 
    if (res_status == 513 && res_data && res_data[keys.issue_fields][0] == keys.email) { 
     vm.error = "Your email is not recognized. Please try again."; 
    } else if (res_status == 513 && res_data && res_data[keys.issue_fields][0] == keys.password){ 
     vm.error = "Your email and password combination was incorrect. Please try again."; 
    } else if (res_status == 513 && res_data && res_data[keys.issue_fields][0] == keys.suspension){ 
     vm.error = "Your account is inactive."; 
    }else if (res_status == 429) { 
     vm.error = "You have attempted a numerous login failed attempt.. Please try again later."; 
    }else if (res_status == -1) { 
     vm.error = "Server Error. Please try again later."; 
    }else { 
     vm.error = "Your email and password combination was incorrect. Please try again."; 
    } 
    vm.dataLoading = false; 
}); 

Это мой колба код:

@user_manager.route('/login/dp', methods=['POST']) 
#make sure limit_key is changed if modify limit since it is hard coded 
@limiter.limit("5/15minute") 
def login_dp(): 
    if key.email() in request.form and key.password() in request.form: 
     user_id = CBDPUserDatabase().login(request.form[key.email()], request.form[key.password()]) 
     if user_id > 0: 
      limit_key = 'LIMITER/%s/%s/10/15/minute' % (get_ipaddr(), request.endpoint) 
      if limit_key in limiter._storage.storage: del limiter._storage.storage[limit_key] 
      if limit_key in limiter._storage.expirations: del limiter._storage.expirations[limit_key] 
      user_profile = CBDPUserDatabase().fetch_user_profile(user_id) 
      token = create_dp_token(user_id, user_profile[key.dealership()][key.id()]) 
      if user_profile is not None: 
       return ResponsePacket.success(data={key.profile(): user_profile, key.token(): token}) 
      else: 
       # Couldn't retrieve the user's profile 
       return ResponsePacket.data_exception(data={key.issue_fields(): [key.profile()]}) 
     elif user_id == -2: 
      # Email address not found in user database 
      return ResponsePacket.data_exception(data={key.issue_fields(): [key.email()]}) 
     elif user_id == -3: 
      # Password given does not match 
      return ResponsePacket.data_exception(data={key.issue_fields(): [key.password()]}) 
     elif user_id == -4: 
      return ResponsePacket.data_exception(data={key.issue_fields(): [key.suspension()]}) 

    else: 
     return ResponsePacket.request_exception() 

Это мой CORS установка:

cors = CORS(application, resources={r"*": {"origins": "*"}}) 

Вот моя колба журналы:

127.0.0.1 - - [19/Aug/2016 08:10:02] "OPTIONS /user/login/dp HTTP/1.1" 200 - 
127.0.0.1 - - [19/Aug/2016 08:10:04] "POST /user/login/dp HTTP/1.1" 513 - 
127.0.0.1 - - [19/Aug/2016 08:10:06] "POST /user/login/dp HTTP/1.1" 513 - 
127.0.0.1 - - [19/Aug/2016 08:10:07] "POST /user/login/dp HTTP/1.1" 513 - 
127.0.0.1 - - [19/Aug/2016 08:10:08] "OPTIONS /user/login/dp HTTP/1.1" 200 - 
127.0.0.1 - - [19/Aug/2016 08:10:08] "POST /user/login/dp HTTP/1.1" 429 - 
127.0.0.1 - - [19/Aug/2016 08:10:10] "POST /user/login/dp HTTP/1.1" 429 - 
127.0.0.1 - - [19/Aug/2016 08:10:13] "OPTIONS /user/login/dp HTTP/1.1" 429 - 
127.0.0.1 - - [19/Aug/2016 08:10:22] "OPTIONS /user/login/dp HTTP/1.1" 429 - 
127.0.0.1 - - [19/Aug/2016 08:10:24] "OPTIONS /user/login/dp HTTP/1.1" 429 - 
127.0.0.1 - - [19/Aug/2016 08:10:24] "OPTIONS /user/login/dp HTTP/1.1" 429 - 
127.0.0.1 - - [19/Aug/2016 08:10:26] "OPTIONS /user/login/dp HTTP/1.1" 429 - 

Вот мой веб-консоль

enter image description here

+0

Запросы предполетных запросов отправляются для любых запросов перекрестного домена браузером, когда приложение пытается выполнить любой запрос GET или POST. Если предполетный срок не возвращается 200 OK, соответствующие GET или POST или что-то еще не будет отправлено. Похоже, проблема здесь в том, что на стороне флеш-лимитера, поскольку после того, как он дал ответ 429 на сообщение, он теперь отвечает на запросы OPTIONS, сделанные браузером с 429, кажется, что что-то нужно сбросить там, на ограничитель или ограничитель должны быть ограничены только конкретными маршрутами, которые вы хотите заблокировать. – shaunhusain

+0

Любые технические предложения? –

+0

жаль, что я не знаю Python или Flask, если вы скажете, что попробовать там действительно, но просто сказать, что это в основном то, что браузеру и серверу нужно разобраться в угловом режиме, на самом деле нет в нем руки, кроме инициируя запрос, но на самом деле браузер является ответственным за отправку запроса OPTIONS и сервера флэков или того, что он поражает на стороне сервера, чтобы соответствующим образом реагировать на них. – shaunhusain

ответ

0

Я получил его сейчас! Просто введите параметры методов

@limiter.limit("20/15minute", methods=['POST']) 
Смежные вопросы