Python Facebook和Google在Django Rest框架和Next.js+;作为前端反应
我在Django Rest框架中使用Djoser为我处理基本的用户身份验证函数。我尝试使用它的社交身份验证端点。根据its,如果我理解正确,我首先将redirect_uri添加到其端点,例如: 它工作得很好。然后我使用该链接进行身份验证,它将代码和状态(如下面代码中的数据)作为重定向uri中的查询返回给我。但是当我将getInitialProps方法中的代码和状态从Next.js服务器发回后端时Python Facebook和Google在Django Rest框架和Next.js+;作为前端反应,python,django,next.js,python-social-auth,djoser,Python,Django,Next.js,Python Social Auth,Djoser,我在Django Rest框架中使用Djoser为我处理基本的用户身份验证函数。我尝试使用它的社交身份验证端点。根据its,如果我理解正确,我首先将redirect_uri添加到其端点,例如: 它工作得很好。然后我使用该链接进行身份验证,它将代码和状态(如下面代码中的数据)作为重定向uri中的查询返回给我。但是当我将getInitialProps方法中的代码和状态从Next.js服务器发回后端时 const authResponse = await axios.post(`http://127
const authResponse = await axios.post(`http://127.0.0.1:8000/user_info/o/facebook/`,data,{
headers:{
'Content-Type':'application/x-www-form-urlencoded'
}
}
Django返回状态代码400。然后我使用postman测试发布代码,并使用'Content-Type':'application/x-www-form-urlencoded'
声明,它显示在窗口上:
{
"non_field_errors": [
"Authentication process canceled"
]
}
我在谷歌OAuth2上也试过同样的例子。下面是my settings.py中的python代码
import os
from dotenv import load_dotenv
load_dotenv()
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DEBUG = True
ALLOWED_HOSTS = ['127.0.0.1','0.0.0.0']
INSTALLED_APPS = [
...
'djoser',
'social_django',
'rest_framework',
'rest_framework.authtoken',
'corsheaders',
'user_info',
...
]
...
CORS_ORIGIN_WHITELIST = [
"http://localhost:3000",
]
ROOT_URLCONF = 'myprojectname.urls'
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_django.context_processors.backends',
'social_django.context_processors.login_redirect',
],
},
},
]
...
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication'
),
'DEFAULT_PERMISSIONS_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
...
AUTHENTICATION_BACKENDS = [
"django.contrib.auth.backends.ModelBackend",
"djoser.social.backends.facebook.FacebookOAuth2Override",
"social_core.backends.google.GoogleOAuth2"
]
SOCIAL_AUTH_FACEBOOK_KEY = os.getenv('FACEBOOK_APP_ID')
SOCIAL_AUTH_FACEBOOK_SECRET = os.getenv("FACEBOOK_SECRET_KEY")
SOCIAL_AUTH_FACEBOOK_SCOPE = ["email"]
SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {"fields": "id, name, email"}
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = os.getenv('GOOGLE_APP_ID')
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = os.getenv("GOOGLE_SECRET_KEY")
SOCIAL_AUTH_RAISE_EXCEPTIONS = False
DJOSER ={
"LOGIN_FIELD": "email",
"USER_CREATE_PASSWORD_RETYPE":True,
"SEND_ACTIVATION_EMAIL": True,
"ACTIVATION_URL":f'{os.getenv("FRONTEND_URL")}/activate/'+'{uid}/{token}',
"SERIALIZERS": {
'user_create':'user_info.serializers.UserCreateSerializer',
'user':"user_info.serializers.UserCreateSerializer"
},
"SOCIAL_AUTH_ALLOWED_REDIRECT_URIS": [os.getenv("FRONTEND_URL")],
}
AUTH_USER_MODEL = 'user_info.User'
...
我只将我的应用程序域设置为localhost
和站点url设置为http://localhost:8000/
在Facebook开发者控制台中
我是否可以取消身份验证过程并成功获取令牌?非常感谢 我有同样的问题,我能够解决这个问题,但是我被卷入了另一个问题,但这可能会为你解决这个问题。只需将要授权的URI列为白名单。我使用谷歌OAuth,这里是我想要传达的内容的截图 你需要设置'http://127.0.0.1/'作为授权域
我也有同样的问题,我能够解决这个问题,但是我被另一个问题缠住了,但这可能会为您解决这个问题。只需将要授权的URI列为白名单。我使用谷歌OAuth,这里是我想要传达的内容的截图 你需要设置'http://127.0.0.1/'作为授权域
您能解决这个问题吗?这可能是相关的。本教程能帮点忙吗?你能解决这个问题吗?这可能是相关的。本教程能帮点忙吗?