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 Express4.x开发框架随手笔记
Nov 23 NodeJs
NodeJS实现阿里大鱼短信通知发送
Jan 17 NodeJs
使用NodeJs 开发微信公众号(三)微信事件交互实例
Mar 02 NodeJs
Nodejs中的this详解
Mar 26 NodeJs
nodeJS删除文件方法示例
Dec 25 NodeJs
nodejs项目windows下开机自启动的方法
Nov 22 NodeJs
基于nodejs res.end和res.send的区别
May 14 NodeJs
nodejs的路径问题的解决
Jun 30 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
NodeJs之word文件生成与解析的实现代码
Apr 01 NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 09 NodeJs
详解nodejs内置模块
May 06 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
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
PHP生成各种常见验证码和Ajax验证过程
2016/01/10 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
2016/12/08 PHP
PHP5.6.8连接SQL Server 2008 R2数据库常用技巧分析总结
2019/05/06 PHP
PHP获取php,mysql,apche的版本信息及更多服务器信息
2021/03/09 PHP
JS 用6N±1法求素数 实例教程
2009/10/20 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
[46:09]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第三场
2014/05/26 DOTA
python3.3实现乘法表示例
2014/02/07 Python
python回溯法实现数组全排列输出实例分析
2015/03/17 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
Python实现对字典分别按键(key)和值(value)进行排序的方法分析
2018/12/19 Python
Python进阶之全面解读高级特性之切片
2019/02/19 Python
Pytorch.nn.conv2d 过程验证方式(单,多通道卷积过程)
2020/01/03 Python
python 计算方位角实例(根据两点的坐标计算)
2020/01/17 Python
使用Python实现牛顿法求极值
2020/02/10 Python
你应该知道的Python3.6、3.7、3.8新特性小结
2020/05/12 Python
Python如何将将模块分割成多个文件
2020/08/04 Python
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
英国高档时尚男装购物网站:MR PORTER
2016/08/09 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
如何用Lucene索引数据库
2016/02/23 面试题
OLEDBConnection和SQLConnection有什么区别
2013/05/31 面试题
什么情况下你必须要把一个类定义为abstract的
2013/01/06 面试题
元旦晚会邀请函
2014/02/01 职场文书
调解员先进事迹材料
2014/02/07 职场文书
产品生产计划书
2014/05/07 职场文书
超市创意活动方案
2014/08/15 职场文书
比赛主持人开场白
2015/05/29 职场文书
使用HttpSessionListener监听器实战
2022/03/17 Java/Android