2017-12-29 7 views
1

를 사용하여 장고에 request.user에서 사용자 설정 :어떻게 <code>request.user</code> 또는 <code>request.session.user</code> 내 자신의 모델에서 내 자신의 사용자를 설정하는 방법 MongoDB를

class User(Document): 
    id = fields.IntField(primary_key=True) 
    username = fields.StringField(required=True) 
    email = fields.EmailField() 
    .... 
    @property 
    def is_authenticated(self): 
     return False 

내가보기에이 설정

user = User.objects.get(email=email) 
request.session.user = user 

하지만 작동하지 않았습니다.

+0

사용자를 관리하고 싶다면 django에 설치된 사용자 모델을 확장해야한다고 생각합니다. 이 튜토리얼 읽기 : https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html – MyMy

답변

1

당신은 설정할 수 없습니다 속성에 session 개체가 당신이하려는 방식입니다. 이 같은

하지만 (그냥 사전처럼 때문에) 당신이 session 객체에 을 설정할 수 있습니다 :

user_id = request.session.get('user_id', None) 
if user_id: 
    user = User.objects.get(id=user_id) 
... 
:

# you can't set a user object directly 
# because it's not JSON serializable 
# but you can set its `id` 
request.session['user_id'] = user.id 

나중에이 같은 사용자를 얻을 수 있습니다

사용자를 로그 아웃하려면 세션에서 키를 삭제하고 :

def logout(...): 
    try: 
     del request.session['user_id'] 
     request.session.flush() 
    except KeyError: 
     pass 
    ... 
0123으로 전화하면됩니다.
+0

감사합니다. request.session [ 'user_id '] html like {% if user.is_authenticated %} –

+0

@YoussefPu 세션 객체에 user_id가 있는지'{% if request.session.user_id %}'로 확인할 수 있습니다. 사용자가 로그인했는지 여부를 알려줍니다. – xyres

0

먼저

참조 반환 된 사용자와 login를 호출 한 후 authenticate을 통해 사용자를 확보하고 있습니다 장고의 문서에서 https://docs.djangoproject.com/en/2.0/topics/auth/default/#django.contrib.auth.login

예 :

from django.contrib.auth import authenticate, login 

def my_view(request): 
    username = request.POST['username'] 
    password = request.POST['password'] 
    user = authenticate(request, username=username, password=password) 
    if user is not None: 
     login(request, user) 
     # Redirect to a success page. 
     ... 
    else: 
     # Return an 'invalid login' error message. 
     ... 
+0

데이터베이스를 사용하고 있습니다. mongodb는 로그인 기능을 사용할 수 없습니다. mongodb 장고 인증을 지원하지 않습니다 –

+0

너무 빨리 읽고 자신의 User 클래스에 불쾌감을 느끼고 있습니다. 나는 당신이 내장 된 User 클래스와 같은 외부 인터페이스를 가진 클래스를 제공한다면 작동 할 것이라고 생각한다. 왜냐하면 세션 처리는 미들웨어가 아니라 사용자 클래스에 의해 수행되기 때문입니다. 당신은 로그인의 소스 코드를 보면서 아이디어를 얻을 수 있습니다 : https://docs.djangoproject.com/en/2.0/_modules/django/contrib/auth/#login –