2017-01-10 11 views
0

私はFacebookログインAPIを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 

私はデコレータでジャンゴ - AJAXを使用していますが、それは他のすべての中で私の作品コードの一部。

views.py:セキュリティCSRF同様の質問で

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

は、多くの場合、問題として指摘されています。だから私は、これは正しいかもしれないコードを、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(){ }); 

更新

どこかfacebook.html

+0

の体内

{% csrf_token %} 

を追加します。あなたのコードは残念なことに助けにはなりません –

+1

コード – itzMEonTV

+0

を更新しました。ログに同じエラーが表示されます –

関連する問題