def _authenticate_user(self, request : Request):
"""
If the area features membership, it invokes the methods of the underlying membership provider to authenticate
the user, supporting anonymous authentication.
:param request: request to authenticate.
"""
request.user = None
encryption_key = self.config.encryption_key
membership = self.membership
set_anonymous_session = False
if self.membership:
# does the request contains the session cookie for this area?
session_cookie_name = self.config.session_cookie_name
session_key = request.cookies.get(session_cookie_name)
if session_key:
# try to load the session
# decrypt the session key
success, session_guid = AesEncryptor.try_decrypt(session_key, encryption_key)
if success:
# try to perform login by session key
success, result = await membership.try_login_by_session_key(session_guid)
if success:
# result is a principal object
request.user = result.principal
request.session = result.session
else:
# the login by session cookie failed: the session could be expired
set_anonymous_session = True
else:
# session key decryption failed
set_anonymous_session = True
else:
# the request does not contain a session cookie for this area
set_anonymous_session = True
if set_anonymous_session:
# initialize an anonymous session
await self.initialize_anonymous_session(request)
return self
评论列表
文章目录