在Django中使用第三方登录:Google,Facebook,微信等等
在Django中使用第三方登录需要借助第三方登录的API或SDK,这些API或SDK可以让我们快速接入第三方登录,并获取用户的相关信息。
下面以Google登录为例,介绍如何在Django中使用第三方登录:
- 创建Google API项目
首先需要创建Google API项目,具体步骤如下:
- 登陆Google Cloud Console;
- 创建新项目;
- 在左侧菜单中选择“API和服务” -> “凭据”;
- 点击“创建凭据” -> “OAuth客户端ID”;
- 选择应用类型为“Web应用程序”;
- 设置授权重定向URI,例如:http://localhost:8000/google/auth_callback/;
- 创建OAuth客户端ID。
- 安装第三方库
在Django项目中安装Google第三方库,可以使用以下命令:
pip install google-auth google-auth-oauthlib google-auth-httplib2
- 编写授权登录视图
在Django中,可以使用类视图来处理授权登录逻辑,具体代码如下:
from django.urls import reverse_lazy from django.conf import settings from django.shortcuts import redirect from django.views.generic import View from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import Flow class GoogleAuthView(View): def get(self, request): flow = Flow.from_client_config( settings.GOOGLE_CLIENT_CONFIG, scopes=settings.GOOGLE_AUTH_SCOPES, redirect_uri=request.build_absolute_uri(reverse_lazy("google_auth_callback")), ) authorization_url, _ = flow.authorization_url(prompt="consent") return redirect(authorization_url) class GoogleAuthCallbackView(View): def get(self, request): flow = Flow.from_client_config( settings.GOOGLE_CLIENT_CONFIG, scopes=settings.GOOGLE_AUTH_SCOPES, redirect_uri=request.build_absolute_uri(reverse_lazy("google_auth_callback")), ) flow.fetch_token(authorization_response=request.build_absolute_uri()) credentials = flow.credentials # TODO: 处理授权登录逻辑 return redirect("/")
其中,GOOGLE_CLIENT_CONFIG
和GOOGLE_AUTH_SCOPES
需要在Django settings中配置,具体配置如下:
GOOGLE_CLIENT_CONFIG = { "web": { "client_id": "your_client_id", "project_id": "your_project_id", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_secret": "your_client_secret", "redirect_uris": ["http://localhost:8000/google/auth_callback/"], "javascript_origins": ["http://localhost:8000"], } } GOOGLE_AUTH_SCOPES = ["openid", "profile", "email"]
- 获取用户信息
完成授权登录后,我们可以获取用户的相关信息,具体代码如下:
from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from googleapiclient.discovery import build def get_google_user_info(credentials): if not credentials.valid: if credentials.expired and credentials.refresh_token: credentials.refresh(Request()) service = build("oauth2", "v2", credentials=credentials) user_info = service.userinfo().get().execute() return user_info
其中,需要传入授权登录后的credentials
参数。
总结:
以上就是在Django中使用Google第三方登录的全部流程,同样的,Facebook,微信等第三方登录也有相应的API或SDK来提供支持,流程类似。
相关文章