2017-08-02 33 views
0

我試圖通過DRF視圖登錄用戶。通過Django休息框架登錄用戶

@list_route(methods=['post']) 
def login(self, request, *args, **kwargs): 

    login_form = LoginForm(request, data=request.data or None) 

    if login_form.is_valid(): 
     _login(request._request, login_form.get_user()) 
    else: 
     raise forms.ValidationError("login wrong") 
    return Response({}) 

上面的代碼毫無例外地運行,但它似乎並沒有真正登錄用戶。

當我刷新瀏覽器,用戶仍然無法登錄。

我怎樣才能登錄的用戶?

+0

在'_login'方法會發生什麼?你可以用涉及的代碼編輯你的問題嗎? –

+0

@JohnMoutafis是的,你的預感是正確的。我使用從django.contrib.auth.views導入登錄爲_login。我應該使用'django.contrib.auth.login' – eugene

+0

現在它已經修復了@eugene? –

回答

1

似乎_login()方法不符合您的期望。

正如你在你的評論中提到的那樣。您正在使用:

from django.contrib.auth.views import login as _login 

但這種方法:

顯示登錄表單和處理登錄操作。

你應該(爲你做的)使用方法:

from django.contrib.auth import login as _login 

其中:

堅持一個用戶ID,並在請求在後臺運行。通過這種方式,用戶不需要在每個請求上重新驗證身份證號碼 。
注意到,在 匿名會話設置數據保留在用戶登錄時。

2

請不要使用DRF登錄會話中的人員。

SessionAuthentication之後的幾行警告提供了有關它的更多詳細信息。

+0

感謝您的信息。不知道這件事 – eugene