您的位置:首页 > 编程语言 > Go语言

django使用邮箱账号密码做用户登录认证,启用加密

2017-05-26 09:32 1071 查看
1、现有登录页面:

from django.conf.urls import url,include
from django.contrib import admin
from itil_ops.views import index,login,logout

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^home/$', index, name='index'),
url(r'^$', index, name='index'),
url(r'^login/$', login, name='login'),
url(r'^logout/$', logout, name='logout'),
url(r'^svnmgr/', include('svnmgr.urls')),
]


2、视图函数:

def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username,password=password)
if user is not None :
auth.login(request, user)
response = HttpResponseRedirect('/home/')
request.session["uid"] = user.id
return  response
else:
return render_to_response('login.html')
else:
# return HttpResponseRedirect('/login/')
return render_to_response('login.html')

def logout(request):
auth.logout(request)
return render_to_response('login.html')


3、增加新的认证app

python manage.py startapp authnew


4、编辑登录视图:

[root@xiaotian-host2.com itil_ops]$ cat authnew/views.py
#coding:utf-8
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.contrib.auth import authenticate as authenticate_old
#import sys
from smtplib import SMTP_SSL
#mail_host="smtp.mxhichina.com"

class myldapBackend:
def authenticate(self,username=None,password=None):
if len(password) == 0:
return None
try:
smtp = SMTP_SSL("smtp.mxhichina.com", 465)
res = smtp.login(username+"@xxxxx你的邮箱地址后缀.com",password)
if  res[0]==235:
return self.get_or_create_user(username,password)
else:
return authenticate_old(username=username,password=password)
except:
return authenticate_old(username=username,password=password)

def get_or_create_user(self, username,password):
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
#info=sys.exc_info()
#print(info[0],":",info[1])
mail = username + "@xxxxx你的邮箱地址后缀.com"
user = User(username=username,email=mail)
user.is_staff = True
user.is_superuser = False
user.set_password('passwd set by mail!#..')
user.save()
#ug.user.add(user)
return user


5、修改登录视图:

引入class

from authnew.views import  myldapBackend

6、修改login视图:

def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
newauth=mymailBackend()
user = newauth.authenticate(username=username,password=password)
if user is not None :
user.backend = 'django.contrib.auth.backends.ModelBackend'
auth.login(request, user)
response = HttpResponseRedirect('/home/')
request.session["uid"] = user.id
return  response
else:
return render_to_response('login.html')
else:
# return HttpResponseRedirect('/login/')
return render_to_response('login.html')


7、测试登录:





8、登录完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: