2013-04-20 32 views
7

Cụ thể, sau khi xác thực và chuyển hướng, request.user là một người dùng ẩn danh.Django: request.user không được đặt sau khi chuyển hướng

đăng nhập (xem chức năng)

def login(request): 
if request.method == 'POST': 

    form = LoginForm(request.POST) 

    if form.is_valid(): 
     #django.contrib.auth.login 
     Login(request, form.get_user()) 
     str = reverse('cm_base.views.index') 
     return HttpResponseRedirect(str) 
    else: 
      # Their password/email combination must have been incorrect 
     pass 

else: 
    form = LoginForm() 

return render_to_response('cm_base/login.html', 
          {"DEBUG": True, 
          'form' : form 
          }, 
          context_instance=RequestContext(request)) 

trong giao diện chỉ mục, tôi loại bỏ các trang trí login_required và thử nghiệm các đối tượng request.user

def index(request): 
test = request.user.is_authenticated() 

return render_to_response('cm_base/index.html', 
          {"DEBUG": True, 
          "user": request.user,}, 
          context_instance=RequestContext(request)) 

thử trả về false.

Fix

tôi đã kết thúc chỉ gọi quan điểm chỉ số trực tiếp. Tôi vẫn còn bối rối là tại sao đối tượng người dùng bị mất khi tôi gọi HttpResponseRedirect.

def login(request): 
if request.method == 'POST': 
    form = LoginForm(request.POST) # Not shown in this example 

    if form.is_valid(): 
     Login(request, form.get_user()) 
     str = reverse('cm_base.views.index') 
     return index(request) 
    else: 
      # Their password/email combination must have been incorrect 
     pass 

else: 
    form = LoginForm() 
+1

Thêm toàn bộ logic xem của bạn, không có cách nào để nói những gì hình thức của bạn và phương pháp đăng nhập giống từ đoạn bạn đã đăng. –

+0

Liệu 'request.user.is_authenticated()' trả về TRUE trong chế độ xem đăng nhập sau khi bạn xác thực người dùng? – Rohan

+1

Bạn có thể chia sẻ với chúng tôi hình thức và chế độ xem đăng nhập của bạn trong đoạn trích pastebin.com không? Cảm ơn bạn. –

Trả lời

0

Bạn đang sử dụng phụ trợ xác thực nào? Nếu nó là một cái gì đó khác hơn là ModelBackend đảm bảo phương thức get_user của bạn là chính xác. Có vẻ như phần mềm trung gian auth đang gửi một số nhận dạng khác (như pk thay vì tên người dùng) so với phần mềm bạn đang tìm kiếm trong phương thức get_user của bạn.

-1

Đây là sửa chữa

<link rel="icon" href="{{ STATIC_URL }}img/favicon.ico" /> 

Tập tin này đã mất tích từ thư mục tĩnh. Kết quả 404 đã phá vỡ phiên người dùng.

3

Rất nhiều thứ đang diễn ra ở đây không nên. Trước tiên, bạn không cần phải vượt qua request.user, tùy chọn này có sẵn theo mặc định miễn là bạn đang sử dụng RequestContext, bạn là ai.

Login() phương pháp này, chính xác là nó đang làm gì? Django cung cấp built-in login method mà bạn nên sử dụng nếu bạn đang sử dụng phần phụ trợ xác thực mặc định.

Bạn cũng không kiểm tra xem người dùng đã được bật hay tắt.

Đây là một phiên bản khác nhau của mã của bạn, chuyển thể từ example in the documentation:

from django.shortcuts import render, redirect 
from django.contrib.auth import authenticate, login 

def login_view(request): 
    form = LoginForm(request.POST or {}) 
    ctx = {'form': form} 

    if form.is_valid(): 

     username = form.cleaned_data['username'] 
     password = form.cleaned_data['password'] 

     user = authenticate(username, password) 

     if not user: 
     ctx['errors'] = 'Invalid Login' 
     return render(request, 'login.html', ctx) 

     if not user.is_active: 
     ctx['errors'] = 'User is locked' 
     return render(request, 'login.html', ctx) 

     login(request, user) 
     return redirect('home') 

    else: 

     return render(request, 'login.html', ctx) 
Các vấn đề liên quan