Django userProfile… 비밀번호없이
-
05-07-2019 - |
문제
로그인이없는 사용자의 서브 세트를 만들고 싶습니다. 기본적으로 그 사람과 관련된 전체가 날려서 사진에 사진 작가 필드를 추가하는 방법으로 실제로 사이트에 로그인하지 마십시오). 경고는 나중에 계정을 가능하게 할 수 있다는 것입니다.
따라서 질문이 사용자 테이블을 사용자profile으로 실제로 확장하지 않고 사용자 테이블과 연결되는 "사람"테이블을 설정하는 가장 좋은 방법이된다고 생각합니다.
해결책
ㅏ 유저 프로필 (반환대로 django.contrib.auth.models.User.get_profile
) 사용자 테이블을 확장하지 않습니다 - 당신이 지정한 모델은 AUTH_PROFILE_MODULE
설정은 단지 a ForeignKey
에게 User
. get_profile
그리고 설정은 실제로 특정 모델의 인스턴스에 액세스하기위한 편의 API 일뿐입니다. ForeignKey
구체적으로 User
사례.
따라서 한 가지 옵션은 ForeignKey
에게 User
할 수 있습니다 null
그리고 당신을 연관시킵니다 Photo
이 프로파일 모델 대신 모델이 있습니다 User
모델. 이를 통해 존재하지 않는 사용자를위한 프로필을 만들고 나중에 등록 된 사용자를 프로필에 첨부 할 수 있습니다.
다른 팁
로그인 할 수없는 사용자? 방금 그들에게 완전히 무작위 비밀번호를 주었다.
import random
user.set_password( str(random.random()) )
그들은 결코 로그온 할 수 없습니다.
자신의 인증 루틴을 제공하면 원하는 것을 확인하거나 확인하지 않을 수 있습니다. 이를 수행하므로 일반 사용자 이름에 실패하면 이메일/비밀번호를 입력 할 수도 있습니다 (아래에서 보여주는 것은 아니지만).
settings.py에서 :
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'userprofile.my_authenticate.MyLoginBackend', # if they fail the normal test
)
userprofile/my_authenticate.py :
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import User
class MyLoginBackend(ModelBackend):
"""Return User record if username + (some test) is valid.
Return None if no match.
"""
def authenticate(self, username=None, password=None, request=None):
try:
user = User.objects.get(username=username)
# plus any other test of User/UserProfile, etc.
return user # indicates success
except User.DoesNotExist:
return None
# authenticate
# class MyLoginBackend
사용 a 사용자와 링크하는 외국 키 필드가있는 모델 익명 액세스가 필요하기 때문에 원하는대로 작동하지 않을 수 있습니다. 그것이 작동하는지 확실하지 않지만 외국 키를 가지고 있으면 어떻게되는지 시도 할 수 있습니다. 익명 서사 (누구의 ID는 항상 없다!) 대신.
당신이 그것을 시도한다면, 당신의 결과를 여기에 게시하면, 나는 궁금 할 것입니다.
django.contrib.auth.models.user는 기본 인증 백엔드 (데이터베이스 기반)를 사용하기위한 목적으로 만 존재합니다. 자신의 백엔드를 작성하면 유지하면서 계정을 비밀번호로 만들 수 있습니다. 정상 비밀번호로 계정. Django 문서는 다음과 같습니다 이것에 대한 장.