Raj*_*hil 5 django-rest-framework python-social-auth
简短的问题:使用DRF,python-social-auth和Angularjs登录可在Facebook上使用,但不能在Google上使用。
我正在构建一个django应用程序,除了本地存储的电子邮件/密码组合之外,该应用程序还需要使用户能够通过Facebook和Google进行注册/登录。其工作方式如下:
access_token都是通过FB或Google的API收集的。access_token将通过AJAX请求发送到服务器。do_auth函数进行身份验证。facebook,这可以正常工作。何时Google(同时尝试google-oauth2和google-plus)do_auth最终引发403禁止错误。当相关网址https://googleapis.com/plus/v1/people/me?access_token=ACCESS_TOKEN&alt=json复制到浏览器时,它会显示错误消息:超出了未经身份验证的使用的每日限制。继续使用需要注册
http://localhost:5001到javascript origin字段并http://localhost:5001/social/complete重定向uri字段(稍后填充该字段。无论有没有,结果相同。)settings.SOCIAL_AUTH_GOOGLE_OAUTH2_KEY和settings.SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET。仔细检查了它们的准确性。'social.backends.google.GoogleOAuth2'到设置。AUTHENTICATION_BACKENDS。试图将GoogleOAuth2和GooglePlus一起放置在此处,并分开放置。settings.SOCIAL_AUTH_USE_DEPRECATED_API为True 后再次尝试。这也将失败,但是错误现在是401。下一步该如何使用Google身份验证?遍历了许多其他类似的问题以及Github中报告的问题。
以下是相关代码:
class SignUpView(CreateAPIView):
def create(self, request, *args, **kwargs):
provider = request.data['provider']
strategy = load_strategy(request)
backend = load_backend(strategy=strategy, name=provider, redirect_uri=None)
token = request.data['access_token']
try:
user = backend.do_auth(token, user=None, **data)
except AuthAlreadyAssociated:
pass
Run Code Online (Sandbox Code Playgroud)
小智 5
我最近一直在努力解决类似的问题,但是由于我使用的是django-rest-framework-social-oauth2,因此情况有所不同。
首先,我注意到您启用了Google+ API,但是:
在设置中添加了“ social.backends.google.GoogleOAuth2”。AUTHENTICATION_BACKENDS。
尝试将设置更改为(这在python social auth docs中进行了描述):
AUTHENTICATION_BACKENDS = (
...
'social_core.backends.google.GooglePlusAuth',
)
SOCIAL_AUTH_GOOGLE_PLUS_KEY = '...'
SOCIAL_AUTH_GOOGLE_PLUS_SECRET = '...'
Run Code Online (Sandbox Code Playgroud)
可能对您有用的另一件事是Google oauth Playground
| 归档时间: |
|
| 查看次数: |
3525 次 |
| 最近记录: |