先从用户注册说起吧,毕竟注册才能去数据库增加数据,然后在增加校验,本次先从注册===>登录===>退出这个层次顺序说起!接下来看一下用户注册!
前台页面以及ajax请求
<form action="">
<!--<p class="h3 pull-right">已有账号注册?马上登录!</p>-->
<div class="form-group col-md-8">
<label for="">用户名:</label>
<input type="text" placeholder="请输入您的用户名" id="user">
</div>
<div class="form-group col-md-8">
<label for="">密码:</label>
<input type="password" placeholder="这里是您的密码输入框!!!" id="pwd">
<br>
<button class="btn btn-primary btn-lg" type="button" id="login">登录</button>
</div>
</form>
<script>
$('#login').click(function(){
//ajax登录校验
$.post("/dologin",{
"username":$('#user').val(),
"password":$('#pwd').val()
},function(result){
if(result==-1){
alert("用户名不存在");
$('#err').fadeIn(800);
$('#err h3').html('用户名不在!请重试')
}else if(result==0){
alert("密码错误");
$('#err').fadeIn(800);
$('#err h3').html('密码错误!!请重新尝试登录')
}else{
alert("登录成功,马上进入首页!");
window.location="/";
}
})
})
</script>
nodejs处理后端
exports.doreg=function(req,res){
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
var username=fields.username;
var password=fields.password;
//加密密码
password=md5(md5(password).substr(8,6)+224+md5(password)+md5('symx'))
console.log(password);
if(err){
res.json(-1);//服务器错误-1
return;
}else{
//开始查找数据
db.find("user",{"username":username},function(err,doc){
if(doc.length!=0){
//数据存在
console.log("用户名存在");
res.json(-2);
return;
}else{
db.insertMany("user",[{"username":username,"password":password}],function(err,result){
if(err){
console.log("数据插入失败");
return;
}else{
//注册成功,写入session;
req.session.login=1;
req.session.username=username;
res.json(1);//数据插入成功;
console.log("数据插入成功");
}
})
}
})
}
// console.log(fields)
});
}
说明:本次采用的加密是md5混合md5(md5(password).substr(8,6)+224+md5(password)+md5('symx')),
双重加密,因此登录校验时候遵循这个规律铭文对比加密后字符串数据库校对!接下来看一下登录校验过程!
前台页面以及ajax提交
<form action="">
<!--<p class="h3 pull-right">已有账号注册?马上登录!</p>-->
<div class="form-group col-md-8">
<label for="">用户名:</label>
<input type="text" placeholder="请输入您的用户名" id="user">
</div>
<div class="form-group col-md-8">
<label for="">密码:</label>
<input type="password" placeholder="这里是您的密码输入框!!!" id="pwd">
<br>
<button class="btn btn-primary btn-lg" type="button" id="login">登录</button>
</div>
</form>
<script>
$('#login').click(function(){
//ajax登录校验
$.post("/dologin",{
"username":$('#user').val(),
"password":$('#pwd').val()
},function(result){
if(result==-1){
alert("用户名不存在");
$('#err').fadeIn(800);
$('#err h3').html('用户名不在!请重试')
}else if(result==0){
alert("密码错误");
$('#err').fadeIn(800);
$('#err h3').html('密码错误!!请重新尝试登录')
}else{
alert("登录成功,马上进入首页!");
window.location="/";
}
})
})
</script>
nodejs校对负责校对数据库(与注册类似又相反操作)
exports.dologin=function(req,res){
var form=new formidable.IncomingForm();
form.parse(req,function(err,fields,files){
var username=fields.username;
var password=fields.password;
//加密密码
password=md5(md5(password).substr(8,6)+224+md5(password)+md5('symx'))
console.log(username+"----密码:"+password);
//查找数据
db.find("user",{"username":username},function(err,doc){
if(doc.length==0){
res.json(-1);//用户名不存在
return;
}else{
//用户名存在分为密码是否错误
if(doc[0].password==password){
req.session.login="1";
req.session.username=username;
res.json(1);//登陆成功
return;
}else{
res.json(0);//密码不匹配
}
}
})
})
}
用户登录错误的情况要进行分类,输入的用户名不存在或者密码错误等!这些校验成功后则就会登陆成功!接下来看一下如何进行用户退出操作!
前台只需要将进行一个超链接进行get请求到退出的路由既可,这里不做前台页面,只进行后端node代码说明
exports.doLogout=function(req,res,next){
req.session.destroy(function(err){
if(err){
console.log("退出失败!");
return;
}
//清除登录cookie
res.clearCookie(user_key)
res.redirect("/")
})
}
说明: res.clearCookie(user_key) 这个user_key就是被清除状态的session,这个变量首先要声明一下,然后在session中间件中声明这个name,这个类似去标记这个session
app.use(session({
name:user_key,
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}))
用户才登陆,注册,退出状态简单实现!如有问题下面留言,如有错误请帮忙指出谢谢!