diff --git a/account/serializers.py b/account/serializers.py index 4b3285a..d4f3995 100644 --- a/account/serializers.py +++ b/account/serializers.py @@ -65,6 +65,7 @@ class ResetPasswordSerializer(serializers.Serializer): class SSOSerializer(serializers.Serializer): + appkey = serializers.CharField(max_length=35) token = serializers.CharField(max_length=40) diff --git a/account/views.py b/account/views.py index 9aa4453..4a6db82 100644 --- a/account/views.py +++ b/account/views.py @@ -327,8 +327,9 @@ class ApplyResetPasswordAPIView(APIView): email_template = email_template.replace("{{ username }}", user.username). \ replace("{{ website_name }}", settings.WEBSITE_INFO["website_name"]). \ - replace("{{ link }}", request.scheme + "://" + request.META[ - 'HTTP_HOST'] + "/reset_password/t/" + user.reset_password_token) + replace("{{ link }}", request.scheme + "://" + + request.META['HTTP_HOST'] + "/reset_password/t/" + + user.reset_password_token) _send_email.delay(settings.WEBSITE_INFO["website_name"], user.email, @@ -380,11 +381,16 @@ class SSOAPIView(APIView): def post(self, request): serializer = SSOSerializer(data=request.data) if serializer.is_valid(): + try: + User.objects.get(openapi_appkey=serializer.data["appkey"]) + except User.DoesNotExist: + return error_response(u"appkey无效") try: user = User.objects.get(auth_token=serializer.data["token"]) user.auth_token = None user.save() return success_response({"username": user.username, + "id": user.id, "admin_type": user.admin_type, "avatar": user.userprofile.avatar}) except User.DoesNotExist: @@ -395,7 +401,7 @@ class SSOAPIView(APIView): @login_required def get(self, request): callback = request.GET.get("callback", None) - if not callback or callback != settings.SSO["callback"]: + if not callback: return error_page(request, u"参数错误") token = rand_str() request.user.auth_token = token diff --git a/oj/custom_settings.example.py b/oj/custom_settings.example.py index efe21bd..15448ce 100644 --- a/oj/custom_settings.example.py +++ b/oj/custom_settings.example.py @@ -5,12 +5,10 @@ import os SECRET_KEY = None -SSO = {"callback": "https://xxxxxxxxx/login"} - -WEBSITE_INFO = {"website_name": u"xx大学 OnlineJudge", - "website_name_shortcut": u"qduoj", - "website_footer": u"xx大学xx学院京ICP备xxxxx号-1", - "url": u"https://your-domain.com"} +WEBSITE_INFO = {"website_name": u"example大学 OnlineJudge", + "website_name_shortcut": u"example oj", + "website_footer": u"example大学信息学院京ICP备xxxxx号-1", + "url": u"https://your-domain-or-ip.com"} SMTP_CONFIG = {"smtp_server": "smtp.xxx.com",