def dispatch(self, request, *args, **kwargs):
if 'p' in request.GET and 'code' in request.GET:
# preserve other query params than p and code when we redirect
other_params = request.GET.copy()
del other_params['p']
del other_params['code']
url = '{}?{}'.format(request.path, other_params.urlencode(safe='/')) if other_params else request.path
user = authenticate(user_pk=request.GET['p'], code=request.GET['code'])
# case where user is already authenticated and different from user above ==> redirect with warning message
if request.user.is_authenticated and request.user != user:
messages.add_message(
request=request,
level=messages.WARNING,
message=self.get_message_string(request.user)
)
return HttpResponseRedirect(url)
# case where user is being authenticated ==> we show a message but only with info level
elif user:
login(request, user)
messages.add_message(
request=request,
level=messages.INFO,
message=self.get_message_string(user)
)
return HttpResponseRedirect(url)
elif request.user.is_authenticated:
return super().dispatch(request, *args, **kwargs)
return redirect_to_login(request.get_full_path(), self.unlogged_redirect_url)
评论列表
文章目录