django 함수 - login 상세 설명
def login(request, user, backend=None):
"""
Persist a user id and a backend in the request. This way a user doesn't
have to reauthenticate on every request. Note that data set during
the anonymous session is retained when the user logs in.
"""
session_auth_hash = ''
if user is None:
user = request.user
if hasattr(user, 'get_session_auth_hash'):
session_auth_hash = user.get_session_auth_hash()
if SESSION_KEY in request.session:
if _get_user_session_key(request) != user.pk or (
session_auth_hash and
not constant_time_compare(request.session.get(HASH_SESSION_KEY, ''), session_auth_hash)):
# To avoid reusing another user's session, create a new, empty
# session if the existing session corresponds to a different
# authenticated user.
request.session.flush()
else:
request.session.cycle_key()
try:
backend = backend or user.backend
except AttributeError:
backends = _get_backends(return_tuples=True)
if len(backends) == 1:
_, backend = backends[0]
else:
raise ValueError(
'You have multiple authentication backends configured and '
'therefore must provide the `backend` argument or set the '
'`backend` attribute on the user.'
)
request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
request.session[BACKEND_SESSION_KEY] = backend
request.session[HASH_SESSION_KEY] = session_auth_hash
if hasattr(request, 'user'):
request.user = user
rotate_token(request)
user_logged_in.send(sender=user.__class__, request=request, user=user)
일부분사용자 계정 정보 검사get_session_auth_hash () 사용자가 암호화한 정보를 얻는hash값입니다.sessionid, 이것을 가져와서 무슨 소용이 있겠습니까, 바로 다음에 클라이언트를 보내는HASHSESSION_KEY 대비, 대비 함수:constanttime_compare()라는 함수는 산열치의 길이만 비교할 뿐 속도는 받아들일 수 있다. 구체적인 대비와 소금을 넣는 과정은 원본 코드를 찍어서 보면 뚜렷하다.
2. 사용자 데이터를 검증한 후session 쓰기 동작을 하고 일련의session 값을 설정합니다.
3. 곧이어 토큰,rotate 업데이트token () 함수를 업데이트합니다.
4. 업데이트가 끝난 후에 하나의 신호 조작을 진행했다. 이곳의 신호 조작은 훅(갈고리)과 유사하다. 여기는 상세하게 설명하지 않고 다음 편은 훅의python 실현과 원리 분석을 쓴다.django에는 디스패치로 결합을 실현하고 일부 동작이 발생할 때 신호는 특정한 발송자가 수용자를 일깨워 주는 것을 허용한다.
모든 동작이 끝난 후에 로그인의 주요 기능을 완성했다. 이런 기능은 스스로 수동으로도 실현할 수 있지만 프레임워크가 비교적 완선하기 때문에 프레임워크 자체 기능을 사용하는 것을 추천한다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.