如何将 firebase google 登录方法添加到 django 应用程序

问题描述 投票:0回答:1

我正在开发 Django Web 应用程序,我想集成 Firebase Google Login 进行用户身份验证。我已经浏览了 Firebase 文档,但找不到在 Django 中实现 Google Login 的直接方法。

我想知道如何将 Firebase Google Login 添加到我的 Django 应用程序中。具体来说,我想实现以下目标:

允许用户使用他们的 Google 帐户登录我的 Django 应用程序。 身份验证成功后,从 Google 检索用户信息,例如电子邮件、姓名和个人资料图片。 将经过身份验证的用户保存到 Firebase 身份验证以进行进一步的身份验证和授权。 我已经为我的项目设置了 Firebase 并获取了必要的服务帐户 JSON 文件。我还安装了所需的软件包,例如 firebase-admin,

python django firebase firebase-authentication
1个回答
0
投票

首先你必须安装“pip install firebase-admin”

在settings.py中添加服务器帐户密钥json文件,从firebase控制台项目设置中获取>单击服务器帐户选项卡>向下滚动,然后选择python并生成密钥,这是json文件,将其重命名,复制并粘贴到您的django项目中,然后在设置中.py 添加此行

#settings.py
import os
import firebase_admin
from firebase_admin import credentials

FIREBASE_ADMIN_CREDENTIAL = os.path.join(BASE_DIR,'path/to/your/serviceAccountKey.json') # you have to add path according to your file location

cred = credentials.Certificate(FIREBASE_ADMIN_CREDENTIAL)
firebase_admin.initialize_app(cred)


#This is view.py
#from client site get the id_token
class GoogleLoginView(APIView):
def post(self, request, *args, **kwargs):
    id_token = request.data.get("id_token")
    if not id_token:
        return Response({"error": "ID token is required"}, status=status.HTTP_400_BAD_REQUEST)

    try:
        # Verify the ID token using Firebase Admin SDK
        decoded_token = firebase_auth.verify_id_token(id_token)
        uid = decoded_token["uid"]
        email = decoded_token["email"]

        # Get or create user
        user, created = User.objects.get_or_create(email=email, defaults={
            "username": email.split("@")[0],
        })
        # Generate JWT token
        refresh = RefreshToken.for_user(user)

        return Response({
            "refreshToken": str(refresh),
            "accessToken": str(refresh.access_token),
            "id": user.id,
            "username": user.username,
            "email": user.email,
        }, status=status.HTTP_200_OK)
    except Exception as e:
        return Response({"error": str(e)}, status=status.HTTP_400_BAD_REQUEST)
© www.soinside.com 2019 - 2024. All rights reserved.