0

Django アプリケーション用にサーバー側を Facebook に認証するように要求しました。

def authenticateViaFacebook(request):                   
  '''
  Redirects users to a page that allows for Facebook login.
  '''
  consumer = oauth2.Consumer(
      key = settings.FACEBOOK_APP_ID,
      secret = settings.FACEBOOK_APP_SECRET)

  # Request token URL for Facebook.
  request_token_url = "https://www.facebook.com/dialog/oauth/"

  # Create client.
  client = oauth2.Client(consumer)

  # Other arguments to Facebook.
  otherArguments = 'client_id=' + settings.FACEBOOK_APP_ID
  otherArguments += '&scope=email'
  otherArguments += '&redirect_uri=' + settings.SITE_URL
  otherArguments += 'authenticationRedirect/facebook'
  otherArguments += '&secret=' + settings.FACEBOOK_APP_SECRET


  # The OAuth Client request works just like httplib2 for the most part.
  res, content = client.request(request_token_url, "GET", otherArguments)

  # Examine the response.
  return HttpResponse(str(res))

Facebookからこんな返事が来ました。

{'status': '200', 'content-length': '15753', 'x-xss-protection': '0', 
 'content-location': u'https://www.facebook.com/dialog/oauth/?oauth_body_hash=1YZMc0vtMcUa5nO81ZkuwoCSct4%3D&oauth_nonce=14826580&oauth_timestamp=1342669603&oauth_consumer_key=117889941688718&oauth_signature_method=HMAC-SHA1&oauth_version=1.0&oauth_signature=t2cIAmQYs4r5IqcsoODqorFIHbs%3D',  
 'x-content-type-options': 'nosniff', 'transfer-encoding': 'chunked',
 'expires': 'Sat, 01 Jan 2000 00:00:00 GMT', 'connection': 'keep-alive',
 '-content-encoding': 'gzip', 'pragma': 'no-cache', 
 'cache-control': 'private, no-cache, no-store, must-revalidate', 
 'date': 'Thu, 19 Jul 2012 03:46:44 GMT', 'x-frame-options': 'DENY', 
 'content-type': 'text/html; charset=utf-8', 
 'x-fb-debug': 'cXSDiq5jL9ZffjalabM6QKEgr50QOhPJsNlHW2MpSSQ='} 

「アクセス トークン」と呼ばれる変数が表示されないため、少し混乱しています。auth_signature_methodや などの奇妙な用語も表示されますoauth_signatureが、それらが何を意味するのかわかりません。

Facebook からアクセス トークンを取得するにはどうすればよいですか? さらに、このアクセストークンを使用して、ユーザーから「名前」などの基本情報を取得するにはどうすればよいですか? アクセストークンは単なる文字列ですよね?

4

3 に答える 3

1

あなたのコードではわかりません。しかし、Facebook グラフ API を使用する場合は簡単です。

def authorize(self):

        warnings.filterwarnings('ignore', category=DeprecationWarning)
        savout = os.dup(1)
        os.close(1)
        os.open(os.devnull, os.O_RDWR)
        try:
            webbrowser.open(FBOAuth.FACEBOOK_GRAPH_URL+'/oauth/authorize?'+urllib.urlencode(
                                {'client_id':FBOAuth.CLIENT_ID,
                                 'redirect_uri':FBOAuth.REDIRECT_URI,
                                 'scope':'read_stream, publish_stream'}))
        finally:
            os.dup2(savout, 1)

        FBOAuth.SECRET_CODE = raw_input("Secret Code: ")
        self.save_secret_code(FBOAuth.SECRET_CODE)

        return FBOAuth.SECRET_CODE

def access_token(self):
if not FBOAuth.SECRET_CODE:
    FBOAuth.SECRET_CODE = self.authorize()

args = {'redirect_uri': FBOAuth.REDIRECT_URI,
        'client_id' : FBOAuth.CLIENT_ID,
        'client_secret':FBOAuth.CLIENT_SECRET,
        'code':FBOAuth.SECRET_CODE,}

access_token = urllib.urlopen(FBOAuth.FACEBOOK_GRAPH_URL + "/oauth/access_token?" + urllib.urlencode(args)).read()
access_token = urlparse.parse_qs(access_token)
FBOAuth.ACCESS_TOKEN = access_token['access_token'][0]
self.save_access_token(FBOAuth.ACCESS_TOKEN)
return FBOAuth.ACCESS_TOKEN

そして、この2つの関数でアクセストークンを取得できます。 ここに私が使用したチュートリアルのリンクがあります。 参照用のFacebook グラフ API ドキュメント

于 2012-07-19T07:00:08.783 に答える
0

あなたのコードはいくつかの点で間違っています。主に、トランザクションにユーザーを参加させる必要があることを忘れていることです。

従うべき手順については、 https://developers.facebook.com/docs/authentication/server-side/を参照してください。これらは実際には非常に簡単で、curl を使用してすべて手動で実行できます。

于 2012-07-20T03:44:05.317 に答える
0

ほとんどの認証プロセスと同様に、アプリ ID を渡すと、"コード" が返されます。2 番目の「GET」では、access_token としてそれを送信します。HMAC にある可能性がある結果を復号化する必要があります。他の人が推奨したように、SDK を使用してこれらの機能を管理すると、より簡単になります。

「auth_signature_method」は、暗号化された署名が署名された方法を意味します。これは、Facebook でユーザーのデータを照会するために使用できる最終的な access_token ではありません。

于 2012-07-19T07:18:36.570 に答える