3

API を使用してアプリケーションを認証しようとしています。
方法は次のとおりです。

  1. を使用して URL を開いていますwebbrowser.open
  2. ユーザーはアプリケーションを認証し、
    https://stackexchange.com/oauth/login_successこの URL でエンコードされた引数を持つ別の URL にリダイレクトされます。
    サンプルのリダイレクト URL は次のとおりです。
    .../login_success#access_token=xyz&expires=00000

私の現在のコード:

auth_url = 'https://stackexchange.com/oauth/dialog'
def authenticate():
    scope = "write_access,private_info,read_inbox"
    url = make_url(auth_url,client_id=132,
                   scope=scope,response_type='code',
                   redirect_uri='https://stackexchange.com/oauth/login_success')
    webbrowser.open(url)

ユーザーが自分自身を認証した後、リダイレクト URL (ユーザーが移動する URL) を取得するにはどうすればよいですか?

4

2 に答える 2

3

たった 1 つのリクエストに対して独自の小さな HTTP サーバーを起動してみてください。API をそれにリダイレクトさせ、リダイレクトされたリクエストが表示されるのを待ちます。これは完全な例ではなく、基本的な概念です。

import BaseHTTPServer
auth_url = 'https://stackexchange.com/oauth/dialog'

# replace with your own http handlers
def wait_for_request(server_class=BaseHTTPServer.HTTPServer,
                     handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    return httpd.handle_request()

def authenticate():
    scope = "write_access,private_info,read_inbox"
    url = make_url(auth_url,client_id=132,
                   scope=scope,response_type='code',
                   redirect_uri='http://localhost:8000/login_success')
    webbrowser.open(url)
    wait_for_request()

ただし、おそらく HTTPS を使用する必要があります。長期的には、既存の OAuth 実装を使用したほうがよい場合があります。

于 2013-03-19T07:05:51.090 に答える
-1

ユーザーがスタック交換で認証されると、SE ページはあなたのページにリダイレクトされます (以下の「redirect_uri」)。現在、コードはhttps://stackexchange.com/oauth/login_successにリダイレクトされています。代わりに、自分が制御するページにリダイレクトする必要があります。

  1. これらのクエリ文字列パラメーターを使用して 、 https://stackexchange.com/oauth/dialogで新しいウィンドウを開きます
    • クライアントID
    • 範囲
    • redirect_uri
    • 状態 - オプション
  2. ユーザーがアプリを承認します
  3. ユーザーは、ハッシュ内のこれらのパラメーターを使用して、redirect_uri にリダイレクトされます
    • アクセストークン
    • expires - オプション、スコープに no_expiry が含まれていない場合のみ

ソース: https://api.stackexchange.com/docs/authentication

于 2013-03-19T07:11:22.160 に答える