이 사용자가 익명인지 또는 실제로 내 시스템의 사용자인지 어떻게 확인합니까?


84
def index(request):
    the_user = request.user

Django에서 실제 사용자인지 아닌지 어떻게 알 수 있습니까? 나는 시도했다 :

if the_user: 그러나 "AnonymousUser"는 아무도 로그인하지 않아도 존재합니다. 따라서 항상 true를 반환하고 작동하지 않습니다.

답변:


140

request.user.is_anonymous반품 여부를 확인할 수 있습니다 True.


21
에주의하십시오 views.py사용해야하는 request.user.is_anonymous()템플릿에 사용해야하지만,이 기능은 이후{{user.is_anonymous}}
amigcamel

12
장고 1.9에서 오히려처럼 보인다 is_authenticated(): 참조하십시오 docs.djangoproject.com/en/1.9/topics/auth/default/...
파올로 스테판

13
장고 1.10에서 is_anonymous는 더 이상 방법 (단지 속성)입니다
maxbellec

2
Paolo Stefan과 동의해야합니다 is_authenticated(). 사용하려는 방법은 . 참조 thegarywilson.com/blog/2006/is_authenticated-vs-is_anonymous
Al Sweigart

3
현재 권장 사항은 request.user.is_authenticatedDjango 1.10+ 의 속성 인 을 사용 하는 것입니다. 이는 현재 와 동일 합니다. docs.djangoproject.com/en/dev/ref/contrib/auth/…is_anonymous 참조하십시오 . Django Guardian도 사용하는 경우 이러한 속성은 예상대로 작동하지 않습니다. django-guardian.readthedocs.io/en/stable/configuration.html 참조
rhunwicks

18

대안

if user.is_anonymous():
    # user is anon user

사용자 개체의 ID가 무엇인지 테스트하는 것입니다.

if user.id == None:
    # user is anon user
else:
    # user is a real user

참조 https://docs.djangoproject.com/en/dev/ref/contrib/auth/#anonymous-users를


4
나쁜 생각 인 것 같습니다. user.is_anonymous ()는 새 버전에서 계속 작동하지만 user.id는 향후 구현에 따라 작동하지 않을 수 있습니다.
maxbellec

또한 Django Guardian을 사용하는 경우 익명 사용자도 ID를 갖게 됩니다. django-guardian.readthedocs.io/en/stable/… 참조 .
rhunwicks

그리고 당 현재 추천 docs.djangoproject.com/en/dev/ref/contrib/auth/...는 User.is_authenticated을 사용하는 것입니다
rhunwicks

불행히도 작동하지 않습니다. 제가 처음 시도한 것이 었습니다. user == None (및 기타 변형)을 사용할 때 "익명"사용자가 나타나는 것 같습니다.
Harlin 2019

4

여기에서 엄청나게 파고 드는 것을 알고 있지만 Google 검색을 통해이 페이지로 이동했습니다.

뷰 정의에 사용자 로그인이 필요한 경우 @login_required 데코레이터를 구현할 수 있습니다.

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):

일부 사용자 지정 없이는 주식 "로그인"보기에서 작동하지 않습니다.
Harlin

0

login_redirect_url이 전송 된 페이지에 있다는 점을 제외하면 비슷한 문제가 발생했습니다. 나는 템플릿을 넣어야했다 :

{% if user.is_authenticated %}
    Welcome Back, {{ username }}
{% endif %}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.