2014-01-12 2 views
0

사용자 자격 증명을 가져 와서 사용자를 만들고 즉시 로그인하는 간단한 등록보기가 있습니다. 로컬 개발 서버에서 완벽하게 작동하지만 배포 할 때 authenticate에 대한 전화는 None을 반환하는 것으로 보입니다. annoyingly 그것은 매번 일어나는 것처럼 보이지 않습니다. 사용자 만들기 및 배포 된 응용 프로그램 엔진 즉시 인증 실패

def register_view(request): 
    import django.contrib.auth as auth 
    if request.method == 'POST': 
     form = auth.forms.UserCreationForm(request.POST) 
     if form.is_valid(): 
      username = request.POST.get('username', None) 
      password1 = request.POST.get('password1', None) 
      auth.models.User.objects.create_user(username=username, password=password1) 
      user = auth.authenticate(username=username, password=password1) 
      if user != None: 
       auth.login(request, user) 
       return HttpResponseRedirect(request.REQUEST.get('next', '/')) 
      else: 
       login_form = auth.forms.AuthenticationForm(data= { 'username': username, 'password': password1 }) 
       return render(request, 'login.html', { 'form': login_form }) 
     else: 
      return render(request, 'register.html', { 'form': form }) 
    else: 
     form = auth.forms.UserCreationForm(error_class=BlogErrorList) 
     return render(request, 'register.html', { 'form': form }) 

내가이 나는 그것이 같은 문제 믿을 other question을 발견하지만, 확인 응답이 결코 : 여기 내보기 코드입니다.

데이터베이스 문제와 동일한 느낌이 들었습니다. 높은 복제 데이터 저장소를 사용하고 있으며 here으로 설명 된대로 데이터베이스 설정에 'HIGH_REPLICATION': True을 추가했지만 그 차이는 없습니다.

어떤 아이디어가 발생할 수 있습니까?

- 편집 - 나는 Django-nonrel 1.4 표준 django.contrib.auth 시스템을 사용하고

. User 모델은 here으로 생성되고 인증 백엔드는 사용자 here을 인증합니다.

답변

3

사용자가 정의 된 방식과 인증 코드가 사용자를 찾는 방식을 표시하지 않았습니다.

키 또는 조상 쿼리에서 사용하지 않으면 궁극적으로 일관성있게 실행됩니다.

당신은 링크에 대한이 https://developers.google.com/appengine/docs/python/datastore/structuring_for_strong_consistency

+0

감사를 읽어야한다, 그것은 업데이트 된 질문을 참조하십시오 그러나 나는 기본 장고 - nonrel 1.4 'auth'을 사용하고, 전체 의미가 있습니다. 강력한 일관성을 보장하기 위해 모델의'create_user'를 오버라이드해야합니까? –

+0

나는 django에 익숙하지 않으므로 create_user와 django를 모두 가져와야한다. 나는 추가 추상화가'create_user'에서'user = self.model (username = username, email = email,')을 통해 앉아 있는지 알지 못합니다. 조상은이 상황에서 의미가 없으므로 일관된 질의를 얻을 수있는 유일한 방법입니다. 1. 사용자를 생성 한 후 Immediatley를 사용하여 엔티티를 얻습니다. 이렇게하면 쓰기가 강제 실행됩니다. 또는 2. 교대로 django가 키를 사용하여 사용자 ID를 사용하게하고, 인증 코드에서 사용자를 가져옵니다. key를 사용하는 것보다 훨씬 간단합니다. –

+0

성공했습니다! authenticate는 실제로 쿼리를 사용하여 사용자를 가져 왔습니다. 새로 생성 된 사용자 ID를 전달하고 그런 식으로 가져 오는 것이 트릭을 수행했습니다. 대단히 감사합니다! –