1

ユーザーが特定のスコープへのアクセスを許可すると、アプリケーションが何かを実行できる oauth フローがあります。これが機能するには、スコープが定義されたアクセス トークンが必要です。これを(django allauthパッケージで)実装しましたが、うまく機能します。でも…テストしたいです。これは私がこれまでに持っているものです(リクエストパッケージはステロイドのurllibのようなものです):

    login = self.client.login(username='test_user', password='test')
    self.assertTrue(login)

    resp = self.client.post(reverse('oauth_login'))
    self.assertEqual(resp.status_code, 302)

    payload = {'session_key': 'email', 'session_password': 'pw', }

    resp2 = requests.post(resp['location'], data=payload)

    resp3 = self.client.get(reverse('do_stuff_with_access_token'))
    self.assertEqual(resp.status_code, 302)

ここでの問題は、リクエスト変数でアクセス トークンを取得できないことです。私の推測では、私はアプリケーションのスコープから外れており、Django はそのリクエスト スコープで変数を取得していません。

これをエレガントな方法でテストするにはどうすればよいでしょうか。access_token を嘲笑することは、私には少し間違っているようです。私は今、フォームに記入するためにSeleniumに行こうとしていますが、それでもまだ成功していません...

ありがとう!

4

2 に答える 2

1

マークへの称賛!

途中で誰かを助けるために。嘲笑はうまくいった。私の場合(django 1.4)、セッションにトークンを追加する必要があります。ネット上にはさまざまなアドバイスがありますが、私は単純なものが好きで、これは少なくともテストスイートではDjangoで機能します。

session = self.client.session
session['request_token'] = {...}
session['access_token'] = {...}
session.save()
于 2012-11-12T21:17:46.553 に答える
1

私は同じ問題に直面し、以下が私のジレンマを解決したことを発見しました:

user = User.objects.get(username='lauren')
client = APIClient()
client.force_authenticate(user=user)

これは、Django のドキュメントから直接取得したものです。

http://www.django-rest-framework.org/api-guide/testing/#force_authenticateusernone-tokennone

残念ながら、この点に到達するまでに多くの検索が必要でした. これが他の誰かの時間を節約することを願っています。

于 2016-02-02T01:33:30.280 に答える