2828from django .shortcuts import render
2929
3030from account .exceptions import AccessPermissionDenied
31+ from apigw .client import BkLoginClient
32+ from apigw .exceptions import BkLoginNoAccessPermission
3133from bk_i18n .constants import BK_LANG_TO_DJANGO_LANG
3234from common .log import logger
33- from components .login import get_user , is_login
3435
3536
3637class AccountSingleton (object ):
@@ -59,47 +60,36 @@ class Account(AccountSingleton):
5960 # 线上 LOGIN_DOMAIN 为空
6061 BK_LOGIN_URL = "/login/"
6162
62- # 蓝鲸统一登录约定的错误码, 表示用户认证成功,但用户无应用访问权限
63- ACCESS_PERMISSION_DENIED_CODE = 1302403
64-
6563 def is_bk_token_valid (self , request ):
6664 """验证用户登录态."""
6765 bk_token = request .COOKIES .get (settings .BK_COOKIE_NAME , None )
6866 if not bk_token :
6967 return False , None
70- ret , data = self .verify_bk_login (bk_token )
71- # bk_token 无效
72- if not ret :
68+
69+ # 校验并获取用户信息
70+ try :
71+ data = BkLoginClient ().get_user (bk_token )
72+ except BkLoginNoAccessPermission as e :
73+ raise AccessPermissionDenied (e )
74+ except Exception :
7375 return False , None
76+
7477 # 检查用户是否存在用户表中
7578 username = data .get ("bk_username" , "" )
7679 user_model = get_user_model ()
7780 try :
7881 user = user_model ._default_manager .get_by_natural_key (username )
79- is_created_user = False
8082 except user_model .DoesNotExist :
8183 user = user_model .objects .create_user (username )
82- is_created_user = True
8384 finally :
8485 try :
85- ret , data = self .get_bk_user_info (bk_token )
86- # 若获取用户信息失败,则用户可登录,但用户其他信息为空
87- user .chname = data .get ("chname" , "" )
88-
86+ user .chname = data .get ("display_name" , username )
8987 # 用户隐私信息置空,需要的时候直接从用户管理 API 中获取
9088 user .company = data .get ("company" , "" )
9189 user .qq = ""
9290 user .phone = ""
9391 user .email = ""
9492 user .role = ""
95-
96- # 仅新用户从用户管理同步权限
97- # 用户创建后直接在桌面管理用户是否能进入到 admin 页面的权限
98- if is_created_user :
99- role = data .get ("bk_role" , "" )
100- is_superuser = True if role == 1 else False
101- user .is_superuser = is_superuser
102- user .is_staff = is_superuser
10393 user .save ()
10494
10595 # 设置timezone session
@@ -110,34 +100,6 @@ def is_bk_token_valid(self, request):
110100 logger .error ("Get and record user information failed:%s" % e )
111101 return True , user
112102
113- def verify_bk_login (self , bk_token ):
114- """请求平台接口验证登录是否失效"""
115- code , message , data = is_login (bk_token )
116- if code == 0 :
117- return True , data
118-
119- if code == self .ACCESS_PERMISSION_DENIED_CODE :
120- logger .info ("No access permission: %s" % message )
121- raise AccessPermissionDenied (message )
122-
123- logger .error ("Verification of user login token is invalid, code: %s, message: %s" % (code , message ))
124- return False , {}
125-
126- def get_bk_user_info (self , bk_token ):
127- """请求平台接口获取用户信息"""
128- code , message , data = get_user (bk_token )
129- if code == 0 :
130- return True , data
131-
132- if code == self .ACCESS_PERMISSION_DENIED_CODE :
133- logger .info ("No access permission: %s" % message )
134- raise AccessPermissionDenied (message )
135-
136- logger .error (
137- "Get user information from the request platform interface failed, code: %s, message: %s" % (code , message )
138- )
139- return False , {}
140-
141103 def build_callback_url (self , request , jump_url ):
142104 callback = request .build_absolute_uri ()
143105 login_scheme , login_netloc = urlparse (jump_url )[:2 ]
0 commit comments