提交 dac245db7b885b8d7fafea99ae6fcb123af441cf

作者 qianyingz
1 个父辈 eec7ae2f

fixed bug# 登录、注销对接三方登录

... ... @@ -37,6 +37,16 @@ def split_by_crlf(s):
37 37 return [v for v in s.splitlines() if v]
38 38
39 39
  40 +def getRedirectUrl(request): # 获取重定向地址
  41 + # 获取头部信息
  42 + X_Forwarded_Proto = request.headers.get("X-Forwarded-Proto") # 协议
  43 + X_Forwarded_Host = request.headers.get("X-Forwarded-Host") # host
  44 + if not X_Forwarded_Proto == None and not X_Forwarded_Host == None:
  45 + return X_Forwarded_Proto+"://"+X_Forwarded_Host
  46 + else:
  47 + return request.host_url.rstrip("/")
  48 +
  49 +
40 50 class DataManager(BlueprintApi):
41 51 bp = Blueprint("Auth", __name__, url_prefix="/auth")
42 52
... ... @@ -136,25 +146,30 @@ class DataManager(BlueprintApi):
136 146 request=request2)
137 147 redirect_uri = grant1.validate_authorization_request()
138 148 access_token = request.args.get("accesstoken")
139   - accesstoken = OAuth2Token.query.filter_by(
140   - access_token=access_token).first()
141   - accesstoken.revoked = True
142   - db.session.commit()
143   - user = current_user()
144   - remove_user()
145 149
146   - # 日志
147   - log = OAuthLog(user_id=user.id, username=user.username,
148   - auth_type=AuthEnum.Other.name.lower(),
149   - message="注销成功", create_time=datetime.now(),
150   - operate_type=OperateEnum.Logout, token=access_token,
151   - displayname=user.displayname, ip=request.remote_addr
152   - )
153   - db.session.add(log)
154   - db.session.commit()
  150 + if not access_token == None:
  151 + accesstoken = OAuth2Token.query.filter_by(
  152 + access_token=access_token).one_or_none()
  153 + if not accesstoken == None:
  154 + accesstoken.revoked = True
  155 + db.session.commit()
  156 + if current_user() != None:
  157 + remove_user()
  158 +
  159 + user = User.query.get(accesstoken.user_id)
  160 + # 日志
  161 + if user != None:
  162 + log = OAuthLog(user_id=user.id, username=user.username,
  163 + auth_type=AuthEnum.Other.name.lower(),
  164 + message="注销成功", create_time=datetime.now(),
  165 + operate_type=OperateEnum.Logout, token=access_token,
  166 + displayname=user.displayname, ip=request.remote_addr
  167 + )
  168 + db.session.add(log)
  169 + db.session.commit()
155 170
156 171 except OAuth2Error as error:
157   - return jsonify(dict(error.get_body()))
  172 + StructurePrint().print(error.__str__()+":" + traceback.format_exc(), "error")
158 173 return redirect(redirect_uri)
159 174
160 175 """接口"""
... ... @@ -255,8 +270,9 @@ class DataManager(BlueprintApi):
255 270 client = oauth2.WebApplicationClient(
256 271 configure.OA["client_id"])
257 272 state = client.state_generator()
  273 + StructurePrint().print(request.headers, "info")
258 274 auth_uri = client.prepare_request_uri(
259   - configure.OA["authorization_endpoint"], configure.OA["redirect_uri"], configure.OA["scope"], state)
  275 + configure.OA["authorization_endpoint"], getRedirectUrl(request) + configure.OA["redirect_uri"], configure.OA["scope"], state)
260 276 session["oauth_state"] = state
261 277 return redirect(auth_uri)
262 278
... ... @@ -267,7 +283,7 @@ class DataManager(BlueprintApi):
267 283 @bp.route("/oa/callback", methods=["GET"])
268 284 def oa_callback():
269 285 try:
270   - print(request.remote_addr)
  286 + auth_default_redirect_uri = configure.auth_default_redirect_uri
271 287 client = oauth2.WebApplicationClient(
272 288 configure.OA["client_id"])
273 289
... ... @@ -280,7 +296,7 @@ class DataManager(BlueprintApi):
280 296
281 297 # 获取token
282 298 body = client.prepare_request_body(
283   - code, redirect_uri=configure.OA["redirect_uri"], client_secret=configure.OA["client_secret"])
  299 + code, redirect_uri=getRedirectUrl(request) + configure.OA["redirect_uri"], client_secret=configure.OA["client_secret"])
284 300
285 301 r = requests.post(configure.OA["token_endpoint"], body, headers={
286 302 "Content-Type": "application/x-www-form-urlencoded"})
... ... @@ -289,7 +305,6 @@ class DataManager(BlueprintApi):
289 305 access_token = tokeninfo.get("access_token")
290 306 id_token = tokeninfo.get("id_token")
291 307
292   - auth_default_redirect_uri = configure.auth_default_redirect_uri
293 308 origin_type = "dci_oa" # 三方登录标识
294 309 if access_token:
295 310 # 获取用户信息
... ...
... ... @@ -27,18 +27,19 @@ class Api(ApiTemplate):
27 27 res["result"] = False
28 28 try:
29 29 # 业务逻辑
30   - username = AESHelper.decode( self.para.get("username", ''))
  30 + username = AESHelper.decode(self.para.get("username", ''))
31 31 password = SM3.encode(AESHelper.decode(self.para.get("pwd", '')))
32 32 role = AESHelper.decode(self.para.get("role", ''))
33 33 company = AESHelper.decode(self.para.get("company", ''))
34 34 position = AESHelper.decode(self.para.get("position", ''))
35 35 email = AESHelper.decode(self.para.get("email", ''))
36 36 phone = AESHelper.decode(self.para.get("phone", ''))
  37 + displayname = username
37 38 # 是否重名
38 39 if(User.query.filter_by(username=username).one_or_none()):
39 40 res["msg"] = "username 已存在"
40 41 else:
41   - user = User(username=username, password=password, role=role,
  42 + user = User(username=username, displayname=displayname, password=password, role=role,
42 43 phone=phone, company=company, position=position, email=email,
43 44 create_time=time.strftime(
44 45 "%Y-%m-%d %H:%M:%S", time.localtime()),
... ...
... ... @@ -55,7 +55,7 @@ class Api(ApiTemplate):
55 55 {"name": "database_guid",
56 56 "in": "formData",
57 57 "type": "string",
58   - "description": "数据库guid", "": "true"},
  58 + "description": "数据库guid", "required": "true"},
59 59
60 60 ],
61 61 "responses":{
... ...
... ... @@ -33,7 +33,7 @@ OA = {
33 33 "client_id": "dmap",
34 34 "client_secret": "secret",
35 35 "scope": "openid profile",
36   - "redirect_uri": "http://localhost:8841/auth/oa/callback",
  36 + "redirect_uri": "/auth/oa/callback",
37 37 "authorization_endpoint": "https://login.chinadci.com/netsso/connect/authorize",
38 38 "token_endpoint": "https://login.chinadci.com/netsso/connect/token",
39 39 "userinfo_endpoint": "https://login.chinadci.com/netsso/connect/userinfo",
... ...
... ... @@ -77,4 +77,8 @@ result=AESHelper.decode(encryption)
77 77
78 78 [验证码基础知识](https://baike.baidu.com/item/%E9%AA%8C%E8%AF%81%E7%A0%81/31701)
79 79 [使用python图像处理标准库](https://www.liaoxuefeng.com/wiki/1016959663602400/1017785454949568)
80   -[pillow](https://pillow.readthedocs.io/en/stable/index.html)
\ No newline at end of file
  80 +[pillow](https://pillow.readthedocs.io/en/stable/index.html)
  81 +
  82 +
  83 +## 5 使用编译文件的方法
  84 +cmd下运行./compile.py
... ...
注册登录 后发表评论