问题描述
我正在尝试为Flutter应用创建身份验证API,该应用将使用google身份验证注册/登录表单来登录用户。我遵循了这个tutorial来实现这一目标。
到目前为止非常好,除了本教程基于GitHub登录而不是基于Google。我设法使其工作到“连接”步骤为止。我可以从重定向中获取code
,但是当我访问http://127.0.0.1:8000/auth/google/
时,我看到它要求输入两个字段(access_token
,code
)。当我尝试仅发布信息时,却出现以下错误:
"non_field_errors": [
"View is not defined,pass it as a context variable"
]
解决方法
我想在 JACKSON MOURA 代码段中添加详细信息和说明。
在settings.py中,你必须这样做。我没有找到任何好的文档。但它适用于社会认证。现在您不再需要使用管理面板来设置社交身份验证应用程序。我展示了 Google、Facebook 和 LinkedIn 的样本。它也适用于其他社交应用。
SOCIALACCOUNT_PROVIDERS = {
"google": {
"APP": {
"client_id": "<client_id>","secret": "<secret>",},'facebook': {
"APP": {
"client_id": "<client_id>","linkedin": {
"APP": {
"client_id": "<client_id>",}
}
}
现在在 view.py 中,您必须创建序列化程序类。一切都会一样。我正在为 Google、LinkedIn 和 Facebook 展示。
class FacebookLogin(SocialLoginView):
adapter_class = FacebookOAuth2Adapter
client_class = OAuth2Client
serializer_class = SocialLoginSerializer
def get_serializer(self,*args,**kwargs):
serializer_class = self.get_serializer_class()
kwargs['context'] = self.get_serializer_context()
return serializer_class(*args,**kwargs)
class GoogleLogin(SocialLoginView):
adapter_class = GoogleOAuth2Adapter
client_class = OAuth2Client
serializer_class = SocialLoginSerializer
def get_serializer(self,**kwargs)
class LinkedInLogin(SocialLoginView):
adapter_class = LinkedInOAuthAdapter
client_class = OAuthClient
serializer_class = SocialLoginSerializer
def get_serializer(self,**kwargs)
现在,后端已准备好从前端获取发布数据,并将显示如下所示的完美错误。它将适用于所有其他社交应用。
,这是djangorestframework的版本冲突错误=> 3.12 解决方案:降级为djangorestframework
,这是因为 rest_auth 不再维护,并且与最新版本的 Django Rest Framework 不兼容。
此错误在切换到 dj-rest-auth 而不是 rest_auth 时得到解决,rest_auth 是原始项目的积极维护分支。
,尝试一下:
class GoogleLogin(SocialLoginView):
adapter_class = GoogleOAuth2Adapter
client_class = OAuth2Client
serializer_class = SocialLoginSerializer
def get_serializer(self,**kwargs)
google_login = GoogleLogin.as_view()