5

認証メカニズムとして django-social-auth を使用しており、ログインしているユーザーでアプリをテストする必要があります。私はしようとしています:

from django.test import Client
c = Client()
c.login(username='myfacebook@username.com", password='myfacebookpassword')

ログインしようとしているユーザーは、ブラウザからのログインに成功します。アプリは既にユーザーのデータへのアクセスを許可されています。

認証メカニズムとして django-social-auth を使用しているときにユニットテストからログインする方法はありますか?

ありがとう

4

1 に答える 1

2

User インスタンスでフィクスチャを作成する

{
    "pk": 15,
    "model": "auth.user",
    "fields": {
        "username": "user",
        "first_name": "user",
        "last_name": "userov",
        "is_active": true,
        "is_superuser": false,
        "is_staff": false,
        "last_login": "2012-07-20 15:37:03",
        "groups": [],
        "user_permissions": [],
        "password": "!",
        "email": "",
        "date_joined": "2012-07-18 13:29:53"
    }
}

このような SocialAuthUser インスタンスでフィクスチャを作成します

{
    "pk": 7,
    "model": "social_auth.usersocialauth",
    "fields": {
        "uid": "1234567",
        "extra_data": "%some account social data%",
        "user": 15,
        "provider": "linkedin"
    }
}

したがって、実際のユーザーと同じ振る舞いをし、必要なすべてのソーシャル データを持っているユーザーを取得できます。新しいパスワードを設定すると、認証メカニズムを使用してこのユーザーをログインできます。

...
user.set_password('password')
user.save()                    
logged_in = self.client.login(username='user', password='password')

次に、ログインが必要なビューを呼び出すだけです

self.client.get("some/url")

django.contrib.auth.backends.ModelBackendこれは必要でありdjango.contrib.sessions、INTALLED_APPS タプルにある必要があることを忘れないでください

また、標準認証を使用する利点は、oauth トークンなどを取得するためにサーバー リクエストを行う必要がないことです。

于 2012-07-27T15:43:07.280 に答える