2016-04-13 17 views
-3

Djangoでカスタムログインページを作成したいと思います。私は正常にユーザーを登録することができますが、私は、ログインしたいときには、ログインされませんでした認証がカスタム認証のために機能していません

マイログインのviews.py:。私はこのコードを記述した登録については

def login_user(request): 
    context = RequestContext(request) 
    if request.method == 'POST': 
     username = request.POST['username'] 
     password = request.POST['password'] 
     print username 
     print password 

     user = authenticate(username=username, password=password) 
     if user: 
      print "rrrrr" 
      if user.is_active: 
       login(request, user) 
       return HttpResponseRedirect('/success/') 
      else: 
       return HttpResponse("Your Rango account is disabled.") 
     else: 
      print "Invalid login details: {0}, {1}".format(username, password) 
      return HttpResponse("Invalid login details supplied.") 
    else: 
     return render_to_response('login.html', {}, context) 

def register(request): 
    context = RequestContext(request) 
    registered = False 
    print "inside register view" 
    if request.method == 'POST': 

     profile_form = ProfileForm(data=request.POST) 
     if profile_form.is_valid(): 

      profile = profile_form.save(commit=False) 

      profile.save() 
      registered = True 
     else: 
      print profile_form.errors 
    else: 
     profile_form = ProfileForm() 

    return render_to_response(
      'register.html', 
      {'profile_form': profile_form, 'registered': registered}, 
      context) 

をマイmodels.py

class Profile(models.Model): 
    # user=models.OneToOneField(User) 
    username=models.CharField(max_length=50) 
    first_name=models.CharField(max_length=50) 
    last_name=models.CharField(max_length=50) 
    email=models.EmailField() 
    contact=models.CharField(max_length=50) 
    password=models.CharField(max_length=50) 

    def __str__(self): 
     return self.username or u' 

私はを供給とpasswordは電子メールを受け入れてそれを渡しますが、常にのelse部分Invalid login detailsに入ります。条件の場合、には入りません。どうすればこのことができますか?

+0

それはuser'は、認証の詳細が正しくないNONE'ので、 ''であるように聞こえます。あなたはどんなエラーを見ていますか?あなたの 'print'ステートメントは何を示していますか? – rnevius

+1

[djangoでカスタムログインを作成する方法](http://stackoverflow.com/questions/36570082/how-to-make-custom-login-in-django) – Sayse

+0

[http] ://stackoverflow.com/a/36570616/3762142)そうでない場合は、「あなたがユーザーを作成する方法」のコードを含めて、多分誰かがあなたの質問に答えます。私はあなたがプレーンテキストとしてパスワードを保存していると思う... –

答えて

0

あなたがこのようなものでなければなりませんdjango.contrib.auth.models.Userに任意のデータを格納していないようです:

models.py

class Profile(models.Model): 
    user = models.OneToOneField(User) 
    contact = models.CharField(maX_length = 50) 
    # User class contain other fields that you need. 

forms.py

class UserForm(forms.Form): 
    class Meta: 
     model = User 

class ProfileForm(forms.Form): 
    class Meta: 
     model = Profile 

登録コード:

def register(request): 
    # ... 
    # Your codes here 

    profile_form = ProfileForm(data=request.POST) 

    # Add this line: 
    user_form = UserForm(data=request.POST) 

    if user_form.is_valid() and profile_form.is_valid(): 
     user = user_form.save() 
     user.set_password(user.password) 
     user.save() 

     profile = profile_form.save(commit=False) 
     profile.save() 
     registered = True 
    else: 
     print profile_form.errors 
     print user_forms.errors 
else: 
    profile_form = ProfileForm() 
    user_form = UserForm() 

return render_to_response(
     'register.html', 
     {'profile_form': profile_form, 'user_form':user_form 'registered': registered}, 
     context) 

あなたが見つけることができるより多くのDjangoの公式ユーザーフィールドhere

+0

ユーザーモデルを使用したいときです。プロファイルフォームのみを使用したい場合は、同じプロセスを実行するにはどうすればいいですか? – vikrant

+0

Djangoの 'authentication/login/logout'を使う方法を探しているなら、上記の構造を説明します。しかし、あなたのアプリで認証をカスタマイズしたいのであれば、[ここ](https://docs.djangoproject.com/ja/dev/topics/auth/customizing/) –

関連する問題