簡體   English   中英

用戶不想在第一次注冊並登錄后再次提示登錄屏幕。 Django的

[英]Do not want to prompt login screen again for the user after he register and log's in first time. Django

我希望用戶在首次登錄后每次都能登錄。 腳步:

  1. 用戶首先注冊並重定向到登錄頁面
  2. 用戶登錄並進入應用程序。

現在,下次用戶已經注冊,並且我不想再詢問他的用戶名和密碼,因為他已經注冊並登錄了。因此,此時,當他單擊登錄按鈕時,應直接將其重定向到無需輸入用戶名和密碼的應用程序。

我的登錄views.py是

from datetime import datetime
from django.contrib import auth
from django.core import serializers
from django.core.exceptions import ValidationError
@csrf_exempt
def login_android(request):
    print "i am in view"
    if request.method == "POST":
        print "you are in method"
        username = request.POST['name']
        password = request.POST['password']
        #user = auth.authenticate(username=username,password=password)
        print username
        login_api(request,username,password)
        user = auth.authenticate(username=username,password=password)
        print user
        if user==None:
            print "user is not available"
            dict = {'username': 'Wrong username or password'}
            response = json.dumps(dict)
            return HttpResponse(response, mimetype="application/json")
        else:
            response = json.dumps((model_to_dict(user)), cls=DjangoJSONEncoder)
            return HttpResponse(response, mimetype="application/json")

我的登錄api.py文件是

def login_api(request,username,password):
    print "you are in login api"
    user = auth.authenticate(username=username,password=password)
    print user
    if user:

        if user.is_authenticated():
            print "user aunticated"
            auth.login(request,user)
        else:
            raise ValidationError
    return user

我在.html頁面中的登錄

$(function()
                {
                localStorage['domain'] = "http://122.171.89.190";
                var domain = localStorage['domain'];
                $('#fac1').on('click', function () {
                        var username = $("#username").val();
                        var password = $("#pwd").val();
                        data = {
                            name: username,
                            password: password
                            };
                        $.ajax({
                            url: domain + "/login/login_android_here/",
                            type: "POST",
                            data: data,
                            success: function (response) {
                                                dat=response.username;
                                                if (dat==username){
                                                window.location = 'file:///android_asset/www/posts.html';
                                                }
                                                else{
                                                    $("#danger").html(dat);
                                                    $("#danger").css("color","red");    
                                                }
                                            },
                                        error: function () {
                                        }
                            });
                                return false;
                            });
                    });

如果用戶已經注冊並登錄,我希望用戶單擊登錄按鈕后直接將其重定向到應用程序。

用戶單擊登錄按鈕時會調用哪個視圖? 當用戶單擊登錄按鈕時,是否會調用login_android視圖? 如果是,請在視圖的開頭添加以下行:

from django.conf import settings
def login_android(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)
        #if the redirect URL is not part of the Django app and you do not know where auth.login(request, user) redirects to, then try
        #user = request.user
        #auth.login(request, user)

這將檢查用戶是否已經登錄,如果已經登錄,它將把他重定向到任何地方

auth.login(request, user)

重定向到。 只是換了

return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)

行以重定向到應用程序的URL(我不確定您將應用程序的URL設置為什么)。

在這里,您可以在注冊時做一件事,您可以將用戶重定向到主應用程序頁面。 這樣用戶將自動獲得登錄信息。

if request.method == "POST":
        print "you are in method"
        username = request.POST['name']
        password = request.POST['password']
        login_api(request,username,password)
        user = auth.authenticate(username=username,password=password)

        if user==None:

            dict = {'username': 'Wrong username or password'}
            response = json.dumps(dict)
            return HttpResponse(response, mimetype="application/json")
        else:
            response = json.dumps((model_to_dict(user)), cls=DjangoJSONEncoder)
            return HttpResponse(response, mimetype="application/json")

並在ajax請求中執行所需的更改。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM