我正在使用Python 2.7的Django 1.10和social-auth-app-django (1.2.0)。它是Python Social Auth库的一部分。
我希望将登录限制为我的公司的域ID,因此我已经从该库中使用了此设置。
现在,如果您尝试使用任何其他域名登录,它会如预期地抛出错误。
我的目标是捕获此异常并向用户显示自定义页面。但是我却无法做到。
如果我将Debug设置为False,则会将用户重定向到我的页面。
我希望将登录限制为我的公司的域ID,因此我已经从该库中使用了此设置。
SOCIAL_AUTH_GOOGLE_OAUTH2_WHITELISTED_DOMAINS=['mycompany.in']
现在,如果您尝试使用任何其他域名登录,它会如预期地抛出错误。
我的目标是捕获此异常并向用户显示自定义页面。但是我却无法做到。
如果我将Debug设置为False,则会将用户重定向到我的页面。
LOGIN_ERROR_URL='/'
我想在页面中显示自定义消息,但是无法将消息传递给用户。
这是我的setting.py的一部分:
DEBUG = False
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/ 您的凭据不被允许"
(SOCIAL_AUTH_LOGIN_ERROR_URL="error-page")
。相反,我收到一个 'Server Error (500)' 但是,如果我删除中间件,那么重定向就会起作用。但是这样我就没有重载方法了。 - Shaikh Saleemdefault_msg = super (CustomSocialAuthExceptionMiddleware) .get_message(request, exception)
后使它正常工作了。不确定这个语句有什么问题 @kaushal ,您能解释一下这个语句失败的原因吗?收到的错误是 “服务器错误(500)”。 - Shaikh Saleem