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 win7下安装方法
May 24 NodeJs
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
Nodejs极简入门教程(二):定时器
Oct 25 NodeJs
轻松创建nodejs服务器(1):一个简单nodejs服务器例子
Dec 18 NodeJs
解析NodeJS异步I/O的实现
Apr 13 NodeJs
配置nodejs环境的方法
May 13 NodeJs
Nodejs+express+ejs简单使用实例代码
Sep 18 NodeJs
nodejs中函数的调用实例详解
Oct 31 NodeJs
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
Dec 06 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
关于NodeJS中的循环引用详解
Jul 23 NodeJs
用Nodejs实现在终端中炒股的实现
Oct 18 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
解决file_get_contents无法请求https连接的方法
2013/12/17 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
Yii 框架使用数据库(databases)的方法示例
2020/05/19 PHP
js获取div高度的代码
2008/08/09 Javascript
jquery tools之tabs 选项卡/页签
2009/07/25 Javascript
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
影响jQuery使用的14个方面
2014/09/01 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
javascript字符串替换函数如何一次性全部替换掉
2015/10/30 Javascript
JavaScript中rem布局在react中的应用
2015/12/09 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
easyui-datagrid特殊字符不能显示的处理方法
2017/04/12 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
node.js中express模块创建服务器和http模块客户端发请求
2019/03/06 Javascript
json字符串对象转换代码实例
2019/09/28 Javascript
vue自定义树状结构图的实现方法
2020/10/18 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
在python中只选取列表中某一纵列的方法
2018/11/28 Python
解决pycharm工程启动卡住没反应的问题
2019/01/19 Python
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
Pycharm如何运行.py文件的方法步骤
2020/03/03 Python
用Python开发app后端有优势吗
2020/06/29 Python
营销与策划应届生求职信
2013/11/04 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
如何写股份合作协议书
2014/09/11 职场文书
幼儿园语言教学反思
2016/02/23 职场文书
python 安全地删除列表元素的方法
2022/03/16 Python
sql查询语句之平均分、最高最低分及排序语句
2022/05/30 MySQL