2017-01-10 7 views
0

Я пытаюсь применить API входа в Facebook в проекте django. Я планировал использовать имя пользователя Facebook и пароль по умолчанию (поскольку django не позволяет создавать пользователей без прохода) и аутентифицироваться через ajax.Django + Ajax + Facebook API 403 FORBIDDEN

FB.api('/me', function(response) { 
    alert(response.name); // it's fine, it's there 
    ajaxPost('/authfb/', {'username': response.name}, function(){ }); 
}); 

Что я получаю в журнале является:

Failed to load resource: the server responded with a status of 403 (FORBIDDEN) 

И в предупреждающем сообщении:

POST /authfb/ 403 FORBIDDEN 
undefined 

Я использую Django-Аякса с декоратором, но это работает для меня во всех других части кода.

views.py:

@ajax 
def authfb(request): 
    if request.method == "POST": 
     username = request.POST.get('username') 
     password = '112358' 
     user = auth.authenticate(username=username, password=password) 
     if user is not None: 
      auth.login(request, user) 
      username = auth.get_user(request).username 
      print ('logged in succesfully') 
      return redirect("/user/%s/" % username) 
     else: 
      print("The username and password were incorrect.") 
      error_message_login_page = 'you do not exist' 
      return render(request, 'blog/facebook.html', {'error_message_login_page':error_message_login_page}) 
    else: 
     print("whatever") 

В подобных вопросах CSRF безопасности часто указывают в качестве вопроса. Так что я попытался это JS код, который может быть правильным, но до сих пор не помогло:

function getCookie(name) { 
var cookieValue = null; 
if (document.cookie && document.cookie !== '') { 
    var cookies = document.cookie.split(';'); 
    for (var i = 0; i < cookies.length; i++) { 
     var cookie = jQuery.trim(cookies[i]); 
     // Does this cookie string begin with the name we want? 
     if (cookie.substring(0, name.length + 1) === (name + '=')) { 
      cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 
      break; 
     } 
    } 
    } 
    return cookieValue; 
} 
var csrftoken = getCookie('csrftoken'); 
$.ajaxSetup({ 
     headers: { "X-CSRFToken": getCookie("csrftoken") } 
    }); 

EDIT:

def fblogin(request): 
    if request.user.is_authenticated(): 
     username = auth.get_user(request).username 
     return redirect("/user/%s/" % username) 
     print(username) 
    else: 
     return render(request, 'blog/facebook.html', {})` 

ответ

0

Попробуйте это вместо того, чтобы ваш.

function getCookie(name) { 
    var value = "; " + document.cookie; 
    var parts = value.split("; " + name + "="); 
    if (parts.length == 2) return parts.pop().split(";").shift(); 
} 

Также

ajaxPost('/authfb/', {'username': response.name, 'csrfmiddlewaretoken': getCookie('csrftoken')}, function(){ }); 

Update

Добавить

{% csrf_token %} 

где-то внутри тела из facebook.html

+0

попробовал код не помог, к сожалению –

+1

Обновлен код – itzMEonTV

+0

такая же ошибка появляется в журнале –

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