2017-01-10 4 views
0

Ich versuche, Facebook Login API in Django-Projekt anzuwenden. Ich plante, den Facebook-Benutzernamen und das Standardpasswort zu verwenden (soweit es django nicht erlaubt, Benutzer ohne Pass zu erstellen) und authentifiziere mich über Ajax.Django + Ajax + Facebook API 403 VERBOTEN

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

Was ich in log erhalten ist:

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

Und in Warnmeldung:

POST /authfb/ 403 FORBIDDEN 
undefined 

Ich bin mit django-Ajax mit Dekorateur, aber es funktioniert in allen anderen für mich Teile des Codes.

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") 

In ähnlichen Fragen CSRF Sicherheit oft als Problem hingewiesen wird. Also habe ich versucht, diesen Code js, das könnte recht haben, aber immer noch nicht helfen:

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', {})` 

Antwort

0

die Sie interessieren anstelle von Ihnen.

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

Auch

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

aktualisieren

hinzufügen

{% csrf_token %} 

irgendwo im Inneren des Körpers von facebook.html

+0

versuchte deinen Code hat leider nicht geholfen –

+1

Der Code – itzMEonTV

+0

aktualisiert der gleiche Fehler erscheint in Log –