2017-01-06 12 views
0

私はdjangoで小さなウェブサイトを開発しており、組み込みのログインビューを使用しています。標準のユーザーを登録し、正しい資格情報でログインしようとすると、「正しいユーザー名とパスワードを入力してください」というログインエラーが表示されます。この問題は、作成したスーパーユーザーには発生しません。エラーメッセージなしで正しい資格情報でログインすることができます。正しいユーザ名パスワードはログインしていませんdjango

これは私の登録ビューを持つviews.pyです。

from django.shortcuts import redirect, render, get_object_or_404 
from django.contrib.auth.models import User 
from .forms import UserForm 

def register_user(request): 
    if request.method == "POST": 
     form = UserForm(request.POST) 
     if form.is_valid(): 
      user = form.save() 
      return redirect('user_profile', pk=user.pk) 
    else: 
     form = UserForm() 
    return render(request, 'interport/register_user.html', {'form':form}) 

admin.py:

from django.contrib import admin 
from django.contrib.auth.models import User 

forms.py:

from django import forms 
from django.contrib.auth.models import User 

class UserForm(forms.ModelForm): 
    class Meta: 
    model = User 
    fields = ('first_name', 'last_name', 'email', 'username', 'password',) 

urls.py:

from django.conf.urls import url 
from django.contrib.auth import views as auth_views 
from . import views 

urlpatterns = [ 
    url(r'^accounts/login/$', auth_views.login, name='login'), 
    url(r'^logout/$', auth_views.logout, {'next_page': '/'}, name='logout'), 
    url(r'^register_user$', views.register_user, name='register_user'), 
    url(r'^$', views.home, name='home'), 
] 

ログインするためのテンプレート:

{% extends "interport/base.html" %} 
{% block content %} 
<div class="container"> 
    <div class="row"> 
    <div class="center col s4 offset-s4 card-panel #fff8e1 amber lighten-5"> 
<h2>Login</h2> 
<form method="post"> 
{% csrf_token %} 
{{ form.as_p }} 
<button type="submit">Login</button> 
</form> 
    </div> 
    </div> 
</div> 
{% endblock %} 
+0

あなたはどこにログインしようとしていますか? djangoの管理ビューですか?スーパーユーザだけが管理者ビューにアクセスできることは間違いありません。 – deweyredman

+0

@deweyredman 'is_admin' booleanは、ユーザーが管理者にアクセスできるようにします。スーパーユーザにはすべての権限があります。しかし、認証は別のものです。管理者にアクセスできないユーザーには、ログインするのはまったく問題ありません。 – allcaps

答えて

2

プレーンテキストのパスワードで新しいユーザーを保存していますが、Djangoは有効性をチェックする前にパスワードを常にハッシュします。

パスワードを正しくハッシュするUser.objects.create_user()でユーザーを作成するか、作成後にハッシュパスワードを設定するにはuser.set_password()を使用する必要があります。

+0

だから@ダニエル私は登録のためのビューを変更する必要があります: user = form.save() この行を入れて: user.set_password( 'raw_password') – kensei

関連する問題