nodejs实现用户登录路由功能


Posted in NodeJs onMay 22, 2019

经过前面几次的学习,已经可以做下小功能,今天要实现的事用户登录路由。

一、users_model.js  功能:定义用户对象模型

var mongoose=require('mongoose'),
   Schema=mongoose.Schema;
var UserSchema=new Schema({
   username:{type:String,unique:true},
   email:String,
   color:String,
   hashed_password:String
});
mongoose.model('User',UserSchema);

二、users_controller.js  功能:为Express服务器实现用户登录路由

var crypto=require('crypto');
var mongoose=require('mongoose'),User=mongoose.model('User');
function hashPW(pwd){
  return crypto.createHash('sha256').update(pwd).
  digest('base64').toString();
}
//实现用户登录路由
exports.login=function (req,res){
  User.findOne({username:req.body.username})
  .exec(function(err,user){
    if(!user){
      err='User Not Found';
    }else if(user.hashed_password===hashPW(req.body.password.toString())){
      req.session.regenerate(function(){
        req.session.user=user.id;
        req.session.username=user.username;
        req.session.msg='Authenticated as ' +user.username;
        res.redirect('/');
      });
    }else{
      err='Authentication failed. ';
    }
    if(err){
      req.session.regenerate(function(){
        req.session.msg=err;
        res.redirect('/login');
      });
    }
  });
};

三、login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>用户登录</title>
<link rel="stylesheet"type="text/css" href="/static/css/styles.css" rel="external nofollow" />
</head>
<body>
<div class="form-container">
 <p class="form-header">登录</p>
 <form method="POST" >
  <label>用户名:</label>
   <input type="text" name="username"><br>
   <label>密码:</label>
   <input type="password" name="password"><br>
   <input type="submit" value="登录">
 </form>
 </div>
 <a href="/signup" rel="external nofollow" >注册</a>
 <hr> <%=msg %>
</body>
</html>

四、routes.js 功能:为Express服务器实现处理Web请求路由

var crypto=require('crypto');
var express=require('express');
module.exports=function(app){
  var users=require('./controllers/users_controller');
  app.use('/static',express.static('./static')).
  use('/lib',express.static('../lib')
);
app.get('/login',function(req,res){
  if(req.session.user){
    res.redirect('/');
  }
  res.render('login',{msg:req.session.msg})
});
app.post('/login',users.login);

页面效果

nodejs实现用户登录路由功能

总结

以上所述是小编给大家介绍的nodejs中实现用户登录路由功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

NodeJs 相关文章推荐
用nodejs写的一个简单项目打包工具
May 11 NodeJs
Ubuntu中搭建Nodejs开发环境过程分享
Jun 01 NodeJs
Nodejs Post请求报socket hang up错误的解决办法
Sep 25 NodeJs
nodejs中实现sleep功能实例
Mar 24 NodeJs
使用DNode实现php和nodejs之间通信的简单实例
Jul 06 NodeJs
Nodejs进阶:基于express+multer的文件上传实例
Nov 21 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
nodejs简单实现TCP服务器端和客户端的聊天功能示例
Jan 04 NodeJs
nodejs中Express与Koa2对比分析
Feb 06 NodeJs
基于Nodejs的Tcp封包和解包的理解
Sep 19 NodeJs
nodejs中函数的调用实例详解
Oct 31 NodeJs
Nodejs文件上传、监听上传进度的代码
Mar 27 NodeJs
基于nodejs的微信JS-SDK简单应用实现
May 21 #NodeJs
nodejs中实现用户注册路由功能
May 20 #NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 #NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 #NodeJs
nodejs搭建本地服务器并访问文件操作示例
May 11 #NodeJs
M2实现Nodejs项目自动部署的方法步骤
May 05 #NodeJs
nodejs通过钉钉群机器人推送消息的实现代码
May 05 #NodeJs
You might like
详解php设置session(过期、失效、有效期)
2015/11/12 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
使用VS开发 Node.js指南
2015/01/06 Javascript
javascript中var的重要性分析
2015/02/11 Javascript
JavaScript实现自动消除按钮功能的方法
2015/08/05 Javascript
js+css实现文字散开重组动画特效代码分享
2015/08/21 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
jQuery实现仿微软首页感应鼠标变化滑动窗口效果
2015/10/08 Javascript
基于Vue.js的表格分页组件
2016/05/22 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
基于bootstrap按钮式下拉菜单组件的搜索建议插件
2017/03/25 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
[03:12]TI9战队档案 - Virtus Pro
2019/08/20 DOTA
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
详解Python的Django框架中的通用视图
2015/05/04 Python
python多线程socket编程之多客户端接入
2017/09/12 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
Python的argparse库使用详解
2018/10/09 Python
django2.2安装错误最全的解决方案(小结)
2019/09/24 Python
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
2020/12/07 Python
H5 meta小结(前端必看篇)
2016/08/24 HTML / CSS
Grow Gorgeous美国官网:只要八天,体验唤醒毛囊后新生的茂密秀发
2018/06/04 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
高中三年学习生活的自我评价
2013/10/10 职场文书
机械设计及其自动化专业推荐信
2013/10/31 职场文书
国贸专业大学生职业生涯规划范文
2014/01/10 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
大学生创业计划书
2019/06/24 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers