0

Chrome と IE の両方で正常に動作する Safari の Django ログイン フォームに問題があります。

Chrome/IE で使用すると、フォームはユーザー名/パスワードを正しく返し (必要な場合)、正しいユーザー名/パスワードを入力すると、ユーザーはログインして {{next}} にリダイレクトされます。

Safari では、ユーザー名/パスワード エラーも正しく機能しますが、有効なユーザー名とパスワードを入力すると、ユーザーは {{next}} ではなくログイン ページにリダイレクトされます。

これが私のログインビューです:

def login_user(request):
   next = request.GET['next']

   state = ""
   username = password = ""

   if request.POST:
       username = request.POST.get('username')
       password = request.POST.get('password')

       user = authenticate(username = username, password = password)
       if user is not None:
           if user.is_active:
               login(request, user)

               return HttpResponseRedirect(next)
           else:
               state = "You're account is not active"
       else:
           state = "Your're username and/or password are incorrect."

    return render_to_response('access/login.html', { 'state' : state }, context_instance=RequestContext(request))

およびログイン テンプレートのフォーム:

<form action="" method="post">{% csrf_token %}
<label for="username">username:</label>
    <input type="text" id="username" name="username"/>      
    <label for="password">password:</label>
<input type="password" name="password"/>
    <input type="submit" value="Log In" />

    <p><strong>{{ state }}</strong></p>
</form>
4

2 に答える 2

0

まあ、機能しHttpResponseRedirectていないか、next値が間違っています。

HttpResponseRedirectを何度も使用しましたが、今のところ問題はありません。

2番目のオプションを見てみましょう。URLパラメータで渡すと、ブラウザは一部の文字をエスケープできます。したがって、結果は機能しなくなります。たぶん、次にコンソールで印刷すると、何が問題なのかわかりますか?

それが役に立てば幸い!

于 2012-08-18T13:31:59.740 に答える
0

これが機能するログイン テンプレート (templates/registration/login.html にあります) です。

{% load url from future %}

{% block content %}

{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}

<form method="post" action="{% url 'django.contrib.auth.views.login' %}">
    {% csrf_token %}
    <table>
    <tr>
        <td>{{ form.username.label_tag }}</td>
        <td>{{ form.username }}</td>
    </tr>
    <tr>
        <td>{{ form.password.label_tag }}</td>
        <td>{{ form.password }}</td>
    </tr>
    </table>

    <input type="submit" value="login" />
    <input type="hidden" name="next" value="{{ next }}" />
</form>

django auth プラグインにフックするだけで、カスタム ビュー メソッドを必要とせずに「うまく機能します」。

于 2012-08-18T14:46:11.253 に答える