Django
Djangoとソーシャルネットワーク
サーチ…
パラメーター
設定 | ありますか |
---|---|
いくつかの構成 | Django-Allauth(私がほとんどの時間を使っている)に付随する便利な基本設定。その他の設定オプションについては、 設定を参照してください。 |
ACCOUNT_AUTHENTICATION_METHOD(= "username"または "email"または "username_email") | 使用するログイン方法を指定します。ユーザーがユーザー名、電子メールアドレス、またはその両方を入力してログインするかどうかを指定します。これを「電子メール」に設定すると、ACCOUNT_EMAIL_REQUIRED = True |
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS(= 3) | 電子メール確認メールの有効期限を指定します(日数)。 |
ACCOUNT_EMAIL_REQUIRED(= False) | サインアップ時には、ユーザーは電子メールアドレスを引き渡す必要があります。これはACCOUNT_AUTHENTICATION_METHOD 設定と並行して行われます |
ACCOUNT_EMAIL_VERIFICATION(=「オプション」) | サインアップ中に電子メールの確認方法を決定します。「必須」、「オプション」、または「なし」のいずれかを選択します。 「必須」に設定すると、電子メールアドレスが確認されるまでユーザーはログインできなくなります。未確認の電子メールアドレスでのログインを許可するには、「オプション」または「なし」を選択します。 「オプション」の場合は電子メール確認メールは送信されますが、「なし」の場合は電子メール確認メールは送信されません。 |
ACCOUNT_LOGIN_ATTEMPTS_LIMIT(= 5) | ログインに失敗した回数。この数を超えると、ユーザーは指定されたACCOUNT_LOGIN_ATTEMPTS_TIMEOUT秒間ログインできなくなります。これはallauthログインビューを保護しますが、Djangoの管理者ログインが無差別に強制されるのを保護しません。 |
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE(= False) | ユーザーがパスワードを変更または設定した後に自動的にログアウトするかどうかを決定します。 |
SOCIALACCOUNT_PROVIDERS(= dict) | プロバイダ固有の設定を含む辞書。 |
簡単な方法:python-social-auth
python-social-authは、ソーシャル認証と認証メカニズムを単純化するフレームワークです。多くのソーシャルバックエンド(Facebook、Twitter、Github、LinkedInなど)
インストール
まず、python-social-authパッケージをインストールする必要があります。
pip install python-social-auth
githubからコードをダウンロードしてください。これをあなたのrequirements.txt
ファイルに追加すると良いでしょう。
CONFIGURING settings.py
settings.pyのadd:
INSTALLED_APPS = (
...
'social.apps.django_app.default',
...
)
バックエンドの設定
AUTHENTICATION_BACKENDSには、使用するバックエンドが含まれており、必要なものだけを置く必要があります。
AUTHENTICATION_BACKENDS = (
'social.backends.open_id.OpenIdAuth',
'social.backends.google.GoogleOpenId',
'social.backends.google.GoogleOAuth2',
'social.backends.google.GoogleOAuth',
'social.backends.twitter.TwitterOAuth',
'social.backends.yahoo.YahooOpenId',
...
'django.contrib.auth.backends.ModelBackend',
)
あなたのプロジェクトsettings.py
はまだAUTHENTICATION_BACKENDS
フィールドを持っていないかもしれません。その場合は、フィールドを追加します。ユーザ名/パスワードによるログインを処理するので'django.contrib.auth.backends.ModelBackend',
を見逃してはいけません。
たとえば、FacebookやLinkedin Backendsを使用する場合は、APIキーを追加する必要があります
SOCIAL_AUTH_FACEBOOK_KEY = 'YOURFACEBOOKKEY'
SOCIAL_AUTH_FACEBOOK_SECRET = 'YOURFACEBOOKSECRET'
そして
SOCIAL_AUTH_LINKEDIN_KEY = 'YOURLINKEDINKEY'
SOCIAL_AUTH_LINKEDIN_SECRET = 'YOURLINKEDINSECRET'
注 :あなたはFacebookの開発者とLinkedinの開発者の中のneddedキーを入手できます。 ここでは、APIキーと秘密キーを具体化するための完全なリストとそれぞれの方法を見ることができます。
秘密鍵に関する注意:秘密鍵は秘密にしておく必要があります。 ここで役立つスタックオーバーフローの説明です。 このチュートリアルは、環境変数の学習に役立ちます。
TEMPLATE_CONTEXT_PROCESSORSはリダイレクト、バックエンドなどの処理に役立ちますが、最初は次のもののみが必要です。
TEMPLATE_CONTEXT_PROCESSORS = (
...
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
...
)
Django 1.8では、上記のようにTEMPLATE_CONTEXT_PREPROCESSORS
を設定することは推奨されていませんでした。これが当てはまる場合は、 TEMPLATES
内に追加します。あなたはこのような何かを見なければなりません:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'social.apps.django_app.context_processors.backends',
'social.apps.django_app.context_processors.login_redirect',
],
},
},
]
カスタムユーザーの使用
カスタムユーザモデルを使用していて、そのユーザと関連付けたい場合は、次の行を追加してください(まだsettings.pyにあります )
SOCIAL_AUTH_USER_MODEL = 'somepackage.models.CustomUser'
CustomUser
は、デフォルトのUserから継承または抽象化するモデルです。
CONFIGURING urls.py
# if you haven't imported inlcude make sure you do so at the top of your file
from django.conf.urls import url, include
urlpatterns = patterns('',
...
url('', include('social.apps.django_app.urls', namespace='social'))
...
)
次に、必要なモデルを作成するためにデータベースを同期する必要があります。
./manage.py migrate
最後に私たちは遊ぶことができます!
いくつかのテンプレートでは、次のようなものを追加する必要があります:
<a href="{% url 'social:begin' 'facebook' %}?next={{ request.path }}">Login with Facebook</a>
<a href="{% url 'social:begin' 'linkedin' %}?next={{ request.path }}">Login with Linkedin</a>
別のバックエンドを使用する場合は、バックエンド名で 'facebook'を変更するだけです。
ユーザーのログアウト
ログインした後は、ログアウトする機能を作成したいと思うかもしれません。ログインテンプレートが表示されたテンプレートの近くに、次のタグを追加します。
<a href="{% url 'logout' %}">Logout</a>
または
<a href="/logout">Logout</a>
urls.py
ファイルをurls.py
ようなコードで編集したいと思うでしょう:
url(r'^logout/$', views.logout, name='logout'),
最後に、次のようなコードでviews.pyファイルを編集します。
def logout(request):
auth_logout(request)
return redirect('/')
Django Allauthを使う
私のすべてのプロジェクトでは、Django-Allauthはセットアップが簡単なものでしたが、これに限定されるものではありません。
- 約50以上のソーシャルネットワーク認証
- ローカルアカウントとソーシャルアカウントの両方のサインアップ
- 複数のソーシャルアカウント
- ソーシャルアカウントの随時登録(オプション)
- 電子メールアドレスの管理(複数の電子メールアドレス、プライマリの設定)
- パスワード忘れた流れEメールアドレス確認フロー
あなたの手を汚すことに興味があれば、Django-Allauthは、認証システムのプロセスと使用方法を調整するための追加の設定を行います。
以下の手順では、Django 1.10+
セットアップ手順:
pip install django-allauth
settings.py
ファイルで、次の変更を行います。
# Specify the context processors as follows:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
# Already defined Django-related contexts here
# `allauth` needs this from django. It is there by default,
# unless you've devilishly taken it away.
'django.template.context_processors.request',
],
},
},
]
AUTHENTICATION_BACKENDS = (
# Needed to login by username in Django admin, regardless of `allauth`
'django.contrib.auth.backends.ModelBackend',
# `allauth` specific authentication methods, such as login by e-mail
'allauth.account.auth_backends.AuthenticationBackend',
)
INSTALLED_APPS = (
# Up here is all your default installed apps from Django
# The following apps are required:
'django.contrib.auth',
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
# include the providers you want to enable:
'allauth.socialaccount.providers.google',
'allauth.socialaccount.providers.facebook',
)
# Don't forget this little dude.
SITE_ID = 1
上記のsettings.py
ファイルの変更を行っurls.py
、 urls.py
ファイルに移動します。あなたのyourapp/urls.py
やProjectName/urls.py
することができます。通常、私はProjectName/urls.py
を好む。
urlpatterns = [
# other urls here
url(r'^accounts/', include('allauth.urls')),
# other urls here
]
include('allauth.urls')
追加するだけで、あなたに次のURLを無料で提供します:
^accounts/ ^ ^signup/$ [name='account_signup']
^accounts/ ^ ^login/$ [name='account_login']
^accounts/ ^ ^logout/$ [name='account_logout']
^accounts/ ^ ^password/change/$ [name='account_change_password']
^accounts/ ^ ^password/set/$ [name='account_set_password']
^accounts/ ^ ^inactive/$ [name='account_inactive']
^accounts/ ^ ^email/$ [name='account_email']
^accounts/ ^ ^confirm-email/$ [name='account_email_verification_sent']
^accounts/ ^ ^confirm-email/(?P<key>[-:\w]+)/$ [name='account_confirm_email']
^accounts/ ^ ^password/reset/$ [name='account_reset_password']
^accounts/ ^ ^password/reset/done/$ [name='account_reset_password_done']
^accounts/ ^ ^password/reset/key/(?P<uidb36>[0-9A-Za-z]+)-(?P<key>.+)/$ [name='account_reset_password_from_key']
^accounts/ ^ ^password/reset/key/done/$ [name='account_reset_password_from_key_done']
^accounts/ ^social/
^accounts/ ^google/
^accounts/ ^twitter/
^accounts/ ^facebook/
^accounts/ ^facebook/login/token/$ [name='facebook_login_by_token']
最後に、 python ./manage.py migrate
を実行して、Django-allauthの移行をデータベースにコミットします。
通常どおり、追加したソーシャルネットワークを使用してアプリにログインするには、ネットワークのソーシャルアカウントの詳細を追加する必要があります。
Django管理者( localhost:8000/admin
)にログインし、ソーシャルアカウントの詳細を追加してソーシャルSocial Applications
下にある。
ソーシャルアプリケーションのセクションに記入するための詳細を取得するには、各認証プロバイダにアカウントが必要な場合があります。
できるものと調整できるものの詳細な設定については、「 設定」ページを参照してください 。