Django, безопасный вход с Ajax со страницы Http - PullRequest
1 голос
/ 26 апреля 2011

Я вхожу в систему со страницы Http через ajax.Я делаю запрос на защищенную (https) страницу.Моя проблема в том, что я не получаю ответ, потому что (я предполагаю), моя функция просмотра возвращает объект HttpResponse на страницу https (мой пользователь все еще находится на http).

Вот код

  @secure_required      
  def login_async(request):
      if request.method=='POST':
         email=request.POST.get('email', '')
          try:
            user=User.objects.get(email__exact=email)
            username=user.username

          except User.DoesNotExist:
             username=''

      password=request.POST.get('password', '')


      user=auth.authenticate(username=username, password=password)
      if user is not None:
        auth.login(request,user)
        user_status=1
        user_fname=user.first_name


       user_data=[{'user_status':user_status, 'user_fname':user_fname,'user_favorite':user_favorite,'flag_record':flag_record, 'message_sent':message_sent,'is_post_owner':is_post_owner}]
       json_data=json.dumps(user_data)
       response=HttpResponse()
       response['Content-Type']="text/javascript"
       response.write(json_data)
       return response  
     else:  
        user_data=[{'user_status':user_status}]
        json_data=json.dumps(user_data)
        response=HttpResponse()
        response['Content-Type']="text/javascript"
        response.write(json_data)
        return response 

  else:
    user_data=[{'user_status':"0"}]                         

           json_data=json.dumps(user_data)
        response=HttpResponse()
        response['Content-Type']="text/javascript"
        response.write(json_data)
        return response 

Почему бы просто не сделать всю страницу https, спросите вы?Хороший вопрос.У меня были некоторые проблемы с совместимостью https кнопки Tweet.

Спасибо

1 Ответ

3 голосов
/ 26 апреля 2011

Если вы проверите, что ваш браузер отправляет по сети, вы увидите, что это не POST, как вы хотели, а запрос OPTIONS.Это вызвано тем, что https XHTTPRequest (AJAX) со страницы http обрабатывается так же, как и междоменный, проверьте jQuery: вместо ответа GET я получаю запрос OPTIONS для ответа на обработку этого запроса.

И одинбольше всего:

json_data=json.dumps(user_data)
response=HttpResponse()
response['Content-Type']="text/javascript"
response.write(json_data)
return response

Может быть заменено просто:

return HttpResponse(json.dumps(user_data), mimetype='text/javascript')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...