Django的Python Social Auth引发Authforbidden异常
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Django的Python Social Auth引发Authforbidden异常,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3318字,纯文字阅读大概需要5分钟。
内容图文
![Django的Python Social Auth引发Authforbidden异常](/upload/InfoBanner/zyjiaocheng/685/36ba26fbd7c14b3791959b4865cf8a5d.jpg)
我正在将Django 1.10与python 2.7和social-auth-app-django(1.2.0)一起使用.它是Python Social Auth库的一部分.
我希望仅将登录限制为我公司的域ID,因此我从库中使用了此设置.
SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS=['mycompany.in']
现在,如果您尝试按预期使用任何其他域登录,则会引发错误.
我的目标是捕获此异常并向用户显示自定义页面.但是对于我的一生,我无法做到.
如果我将Debug设置为False,它将用户重定向到我的
LOGIN_ERROR_URL='/'
页面,但无法将我的自定义消息传递给用户
这是我的setting.py的一部分
调试=假
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'social_django.middleware.SocialAuthExceptionMiddleware',
]
#social auth
SOCIAL_AUTH_GOOGLE_OAUTH2_KEY= "9******6.apps.googleusercontent.com"
SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET="W*****x"
SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS=['mycompany.in']
LOGIN_URL = 'login'
LOGIN_REDIRECT_URL = 'upload_file'
LOGOUT_URL = 'logout'
LOGIN_ERROR_URL='logout
在我看来,我有这段代码可以处理异常
from social_django.middleware import SocialAuthExceptionMiddleware
from social_core.exceptions import AuthForbidden
class SocialAuthExceptionMiddleware(SocialAuthExceptionMiddleware):
def process_exception(self, request, exception):
print "exception occured"
if hasattr(social_exceptions, 'AuthForbidden'):
print "hello two"
return HttpResponse("I'm a exception %s" % exception)
else:
print "other exception"
raise exception
我什至尝试过
def process_template_response(self):
print "response"'
def get_redirect_uri(request, exception):
print "URL"
但无济于事.
我关注了这些链接
python-social-auth AuthCanceled exception
和
这是debug设置为False时的输出:
“AuthForbidden at /app/oauth/complete/google-oauth2/
Your credentials aren’t allowed”
解决方法:
>需要在settings.py中为SOCIAL_AUTH_LOGIN_ERROR_URL设置值
>扩展SocialAuthExceptionMiddleware类&需要覆盖“ get_message”方法
>处理错误URL将消息显示给用户.
例如
中间件
from social_django.middleware import SocialAuthExceptionMiddleware
class CustomSocialAuthExceptionMiddleware(SocialAuthExceptionMiddleware):
def get_message(self, request, exception):
default_msg = super(CustomSocialAuthExceptionMiddleware).get_message(request, exception) # in case of display default message
return "Custom messages text write here."
settings.py
SOCIAL_AUTH_LOGIN_ERROR_URL = '/error_page/'
MIDDLEWARE = [
'...',
'path.to.custom.middleware.CustomSocialAuthExceptionMiddleware',
]
URL.py
from django.conf.urls import url
from views import ErrorPage
urlpatterns = [
url(r'^error_page/$', ErrorPage.as_view(), name="error-page"),
]
view.py
from django.views.generic.base import TemplateView
class ErrorPage(TemplateView):
template_name = 'error.html'
error.html(模板)
....
<body>
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }} </li>
{% endfor %}
</ul>
{% endif %}
</body>
....
如果您正在使用django消息框架.在不使用django消息框架的情况下,中间件将消息添加到GET参数中,该参数可以显示在错误页面上.
内容总结
以上是互联网集市为您收集整理的Django的Python Social Auth引发Authforbidden异常全部内容,希望文章能够帮你解决Django的Python Social Auth引发Authforbidden异常所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。