2013-01-11 26 views
2

我有一个登录和身份验证功能,从窗体中获取输入,验证数据库中的数据,如果正确返回right.html,如果不返回wrong.html。密码存储在galaxy_user数据库,UNAME的输出是:认证在Django中不起作用?

u'sachitad' 

而且PASSW的输出是:

u'f8566297ee28e8a3096497070b37b91d24c24243' 



def login(request): 
     if request.method == 'POST': 
      username = request.POST['username'] 
      password = request.POST['password'] 
      u = ''.join(username) 
      p = hashlib.sha1(password).hexdigest() 
      a = GalaxyUser.objects.values_list('username', 'password') 
      uname = a[0][0] 
      passw = a[0][1] 
      user = authenticate(uname=u, passw=p) 

      if user is not None: 
       return render_to_response('right.html', context_instance=RequestContext(request)) 

      else: 
       return render_to_response('wrong.html', context_instance=RequestContext(request)) 

     else: 
      return render_to_response('login.html', context_instance=RequestContext(request)) 

编辑: GalaxyUser表:

id | create_time   | update_time   | email       | password         | external | deleted | purged | username | form_values_id | disk_usage | 
+----+---------------------+---------------------+-------------------------------+------------------------------------------+----------+---------+--------+----------+----------------+------------+ 
| 1 | 2013-01-11 15:00:30 | 2013-01-11 15:00:30 | [email protected] | f8566297ee28e8a3096497070b37b91d24c24243 |  0 |  0 |  0 | sachitad |   NULL |  NULL | 
| 2 | 2013-01-11 15:01:01 | 2013-01-11 15:01:01 | [email protected] | f8566297ee28e8a3096497070b37b91d24c24243 |  0 |  0 |  0 | saugat |   NULL |  NULL | 
+----+---------------------+---------------------+-------------------------------+------------------------------------------+----------+---------+--------+- 

我想用电子邮件和密码进行身份验证。

回答

0

authenticate()需要两个关键字参数,usernamepassword

user = authenticate(username=u, password=p)


编辑:

这很难说是什么问题,因为我们没有任何调试信息......你可能会在你的注册功能不正确的注册用户,因此不正确地设置用户名或密码。这可以解释为什么你被重定向到wrong.html页面。下面的登录功能对我的作品:

from django.shortcuts import render_to_response, redirect 
from django.http import HttpResponseRedirect 
from django.template import RequestContext 
from somewhere.forms import LoginForm 
from django.contrib.auth import authenticate, login 

def Login(request): 
    if request.method == 'POST': 
     login_form = LoginForm(request.POST) # Bound LoginForm 
     if login_form.is_valid(): 
      username = login_form.cleaned_data['username'] 
      password = login_form.cleaned_data['password'] 
      user = authenticate(username=username, password=password) 
      if user is not None: 
       if user.is_active: 
        login(request, user) 
        return HttpResponseRedirect('/success/') 
       else: 
        # user has not been activated...must activate using the following lines: 
        #### request.session['username'] = username 
        #### user.backend = 'django.contrib.auth.backends.ModelBackend' 
        #### user.is_active = True 
        #### user.save() 
      else: 
       # u_and_p_error = "Username and password did not match" 
     else: 
      return render_to_response('index.html', {'login_form': login_form}, context_instance=RequestContext(request)) 
+0

试过!没有工作。尽管使用了正确的用户名和密码,它仍会被重定向到wrong.html。这是一个逻辑错误,所以我没有得到回溯。 – user1881957

+0

我要编辑一秒 – sgarza62

+0

我没有注册用户。我正在使用同一个数据库的另一个应用程序的表。 – user1881957

2

Django的使用给定的算法(“MD5”,“SHA-1”或“地穴”)

身份验证存储的密码作为给定明文密码的hexdigest和盐()会在注册用户时提供您提供的密码,而不是其散列版本。您需要提供验证纯文本密码以验证用户身份。