Python サーバー プログラミング: django-allauth を使用して OAuth 認証を実装する

王林
リリース: 2023-06-18 11:27:07
オリジナル
1434 人が閲覧しました

現代のインターネット アプリケーションでは、ユーザーの認証と認可は非常に重要な要素です。 OAuth (Open Authorization) プロトコルは、現代のインターネット開発で最も一般的に使用される認証および認可プロトコルの 1 つです。この記事では、Python の Web フレームワーク Django と django-allauth というパッケージを使用して OAuth 認証を実装する方法を紹介します。

Django は、Python で書かれた無料のオープンソース Web アプリケーション フレームワークであり、開発者が高品質の Web アプリケーションを迅速に構築するのに役立ちます。 django-allauth は、開発者にソーシャル認証、OAuth、OpenID、電子メール認証などの機能を提供する Django パッケージです。

まず、Django と django-allauth をインストールする必要があります。 pip ツールを使用してインストールできます。コマンドは次のとおりです。

pip install django
pip install django-allauth
ログイン後にコピー

インストールが完了したら、django-allauth 構成情報を Django アプリケーションの settings.py ファイルに追加する必要があります。ファイルの最後に次の行を追加します。

INSTALLED_APPS = [
    # ...
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.google',
    # ...
]

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
]

SITE_ID = 1
LOGIN_REDIRECT_URL = '/'
ACCOUNT_EMAIL_VERIFICATION = 'none'
SOCIALACCOUNT_QUERY_EMAIL = True
SOCIALACCOUNT_PROVIDERS = {
    'google': {
        'SCOPE': ['profile', 'email'],
        'AUTH_PARAMS': {'access_type': 'online'},
    },
}
ログイン後にコピー

上記の構成では、Django のすべての認証プラグインとソーシャル プラグインを有効にし、Google を OAuth プロバイダーとして設定しました。

OAuth 認証をビューに追加する:
次に、OAuth 認証関数をビューに追加する必要があります。 「login」というビューを作成し、その中に次のコードを追加します。

from allauth.socialaccount.models import SocialAccount
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render

@login_required
def login(request):
    social_account = SocialAccount.objects.filter(user=request.user).first()

    if social_account:
        return redirect('/')
        
    social_login = request.session.get('sociallogin')
    
    if social_login:
        if social_login.account.provider == 'google':
            social_account = SocialAccount(
                user=request.user, 
                provider=social_login.account.provider, 
                uid=social_login.account.uid, 
                extra_data=social_login.account.extra_data, 
            )
            social_account.save()
            return redirect('/')
            
    context = {
        'google_login_url': '/accounts/google/login/',
    }
    
    return render(request, 'login.html', context)
ログイン後にコピー

このビューのコードでは、まずユーザーがソーシャル アカウントに関連付けられているかどうかを確認し、関連付けられている場合は直接リダイレクトします。ホームページ。ユーザーがソーシャル アカウントに関連付けられていない場合は、ユーザーのセッションに OAuth 情報がバインドされているかどうかを確認します。

そうであれば、OAuth 情報が Google アカウントに属しているかどうかを確認し、それを SocialAccount オブジェクトとして保存します。バインディングがない場合は、Google ログイン URL とテンプレートを含む辞書を返します。

最後に、ユーザーがクリックして OAuth 認証を開始できるように、テンプレート login.html に URL を追加する必要があります。ここでは「google_login_url」という変数が使用されているため、テンプレート コンテキストに配置します。テンプレート コードは次のとおりです。

{% extends 'base.html' %}

{% block content %}
    <h1>Login</h1>
    <p>Please login with your Google account.</p>
    <a href="{{ google_login_url }}">Google Login</a>
{% endblock %}
ログイン後にコピー

最後に、OAuth 認証 URL パターンをプロジェクトの urls.py ファイルに追加する必要があります。ファイルの最後に次の内容を追加します。

from django.urls import include, path
from django.contrib import admin

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('allauth.urls')),
    path('', login, name='login'),
]
ログイン後にコピー

これで、OAuth 認証機能が完成しました。 Django サーバーを実行し、ブラウザーでビューにアクセスできます。これにより、Google の OAuth 認証ページにジャンプし、ユーザーの承認を要求します。

ユーザーが承認すると、Django アプリケーションに戻り、ホームページにリダイレクトされます。データベースには、このユーザーに関する OAuth 情報を含む新しい SocialAccount レコードが作成されます。

この記事では、Django アプリケーションに OAuth 認証を実装する方法を紹介します。 django-allauth の使用は非常に簡単で、認証を実行するために必要な設定はほんの少しだけです。この記事が、認証と認可に OAuth を使用する方法を検討している人々にとって非常に役立つことを願っています。

以上がPython サーバー プログラミング: django-allauth を使用して OAuth 認証を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!