11from django .shortcuts import render
22
33# Create your views here.
4-
4+ from urllib . parse import urlparse
55from django .conf import settings
66from django .http import HttpResponse , HttpResponseRedirect
77from django .contrib .auth import get_user_model
2323logger = logging .getLogger (__name__ )
2424
2525
26+ def get_redirecturl (request ):
27+ nexturl = request .GET .get ('next_url' , None )
28+ if not nexturl or nexturl == '/login/' or nexturl == '/login' :
29+ nexturl = '/'
30+ return nexturl
31+ p = urlparse (nexturl )
32+ if p .netloc :
33+ site = Site .objects .get_current ().domain
34+ if not p .netloc .replace ('www.' , '' ) == site .replace ('www.' , '' ):
35+ logger .info ('非法url:' + nexturl )
36+ return "/"
37+ return nexturl
38+
39+
2640def oauthlogin (request ):
2741 type = request .GET .get ('type' , None )
2842 if not type :
2943 return HttpResponseRedirect ('/' )
3044 manager = get_manager_by_type (type )
3145 if not manager :
3246 return HttpResponseRedirect ('/' )
33- nexturl = request .GET .get ('next_url' , None )
34- if not nexturl or nexturl == '/login/' :
35- nexturl = '/'
47+ nexturl = get_redirecturl (request )
3648 authorizeurl = manager .get_authorization_url (nexturl )
3749 return HttpResponseRedirect (authorizeurl )
3850
3951
4052def authorize (request ):
41- manager = None
4253 type = request .GET .get ('type' , None )
4354 if not type :
4455 return HttpResponseRedirect ('/' )
@@ -47,9 +58,7 @@ def authorize(request):
4758 return HttpResponseRedirect ('/' )
4859 code = request .GET .get ('code' , None )
4960 rsp = manager .get_access_token_by_code (code )
50- nexturl = request .GET .get ('next_url' , None )
51- if not nexturl :
52- nexturl = '/'
61+ nexturl = get_redirecturl (request )
5362 if not rsp :
5463 return HttpResponseRedirect (manager .get_authorization_url (nexturl ))
5564 user = manager .get_oauth_userinfo ()
@@ -88,7 +97,7 @@ def authorize(request):
8897 oauth_user_login_signal .send (sender = authorize .__class__ , id = user .id )
8998 login (request , author )
9099 return HttpResponseRedirect (nexturl )
91- if not email :
100+ else :
92101 user .save ()
93102 url = reverse ('oauth:require_email' , kwargs = {
94103 'oauthid' : user .id
@@ -105,7 +114,6 @@ def emailconfirm(request, id, sign):
105114 if not get_md5 (settings .SECRET_KEY + str (id ) + settings .SECRET_KEY ).upper () == sign .upper ():
106115 return HttpResponseForbidden ()
107116 oauthuser = get_object_or_404 (OAuthUser , pk = id )
108- author = None
109117 if oauthuser .author :
110118 author = get_user_model ().objects .get (pk = oauthuser .author_id )
111119 else :
@@ -202,9 +210,6 @@ def form_valid(self, form):
202210
203211def bindsuccess (request , oauthid ):
204212 type = request .GET .get ('type' , None )
205-
206- title = ''
207- content = ''
208213 oauthuser = get_object_or_404 (OAuthUser , pk = oauthid )
209214 if type == 'email' :
210215 title = '绑定成功'
0 commit comments