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 相关文章推荐
windows系统下简单nodejs安装及环境配置
Jan 08 NodeJs
跟我学Nodejs(三)--- Node.js模块
May 25 NodeJs
NodeJS测试框架mocha入门教程
Mar 28 NodeJs
使用nodejs爬取前程无忧前端技能排行
May 06 NodeJs
nodejs前端自动化构建环境的搭建
Jul 26 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
NodeJs项目中关闭ESLint的方法
Aug 09 NodeJs
nodejs log4js 使用详解
May 31 NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 NodeJs
Nodejs 微信小程序消息推送的实现
Jan 20 NodeJs
NodeJs内存占用过高的排查实战记录
May 10 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
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
PHP使用者状态管理功能的应用
2006/10/09 PHP
UCenter Home二次开发指南
2009/05/28 PHP
php 使用post,get的一种简洁方式
2010/04/25 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
jquery 文本上下无缝滚动,鼠标放上去就停止 小例子
2013/06/05 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
选择复选框按钮置灰否则按钮可用
2014/05/22 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
快速掌握jQuery插件开发
2017/01/19 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
详解基于Angular4+ server render(服务端渲染)开发教程
2017/08/28 Javascript
基于Vue制作组织架构树组件
2017/12/06 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
JS实现音乐钢琴特效
2020/01/06 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
2020/11/12 Javascript
[43:47]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#2 MVP.Phx VS Fnatic第一局
2016/03/05 DOTA
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
linux查找当前python解释器的位置方法
2019/02/20 Python
详解python中init方法和随机数方法
2019/03/13 Python
python读取并定位excel数据坐标系详解
2019/06/26 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
Python的Django框架实现数据库查询(不返回QuerySet的方法)
2020/05/19 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
美国顶级水上运动专业店:Marine Products
2018/04/15 全球购物
EJB的激活机制
2013/10/25 面试题
检察官就职演讲稿
2014/01/13 职场文书
成功的餐厅经营创业计划书
2014/01/15 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
股东授权委托书
2014/10/15 职场文书