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学习笔记之MongoDB模块
Jan 13 NodeJs
nodejs 实现钉钉ISV接入的加密解密方法
Jan 16 NodeJs
nodejs处理图片的中间件node-images详解
May 08 NodeJs
nodeJS(express4.x)+vue(vue-cli)构建前后端分离实例(带跨域)
Jul 05 NodeJs
nodejs中安装ghost出错的原因及解决方法
Oct 23 NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 NodeJs
nodeJS微信分享
Dec 20 NodeJs
nodejs acl的用户权限管理详解
Mar 14 NodeJs
nodejs搭建本地服务器轻松解决跨域问题
Mar 21 NodeJs
nodejs读取本地中文json文件出现乱码解决方法
Oct 10 NodeJs
Nodejs实现多文件夹文件同步
Oct 17 NodeJs
nodejs环境使用Typeorm连接查询Oracle数据
Dec 05 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导出word文档与excel电子表格的简单示例代码
2014/03/08 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
2014/07/25 PHP
WordPress网站性能优化指南
2015/11/18 PHP
PHP下载文件的函数实例代码
2016/05/18 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
模拟jQuery中的ready方法及实现按需加载css,js实例代码
2013/09/27 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
利用浏览器全屏api实现js全屏
2014/01/16 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
node.js实现逐行读取文件内容的代码
2014/06/27 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
vue.js实现请求数据的方法示例
2017/02/07 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
谈谈JS中的!!
2017/12/07 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
jQuery中ajax请求后台返回json数据并渲染HTML的方法
2018/08/08 jQuery
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
python3.3实现乘法表示例
2014/02/07 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
2019/01/04 Python
基于python生成器封装的协程类
2019/03/20 Python
Python使用xlrd实现读取合并单元格
2020/07/09 Python
HTML5中图片之间的缝隙完美解决方法
2017/07/07 HTML / CSS
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
加拿大城市本地限时优惠:Buytopia.ca
2018/09/19 全球购物
Delphi CS笔试题
2014/01/04 面试题
师范生自我鉴定范文
2013/10/05 职场文书
亲戚结婚的请假条
2014/02/11 职场文书
社会发展项目建议书
2014/08/25 职场文书
《微笑着面对生活》优秀演讲稿范文
2014/09/23 职场文书
个人剖析材料及整改措施
2014/10/07 职场文书
2014年妇女工作总结
2014/12/06 职场文书
七年级作文之下雨天
2019/12/23 职场文书