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获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
Sep 26 NodeJs
使用nodejs开发cli项目实例
Jun 03 NodeJs
Nodejs express框架一个工程中同时使用ejs模版和jade模版
Dec 28 NodeJs
你一定会收藏的Nodejs代码片段
Feb 04 NodeJs
Windows 系统下设置Nodejs NPM全局路径
Apr 26 NodeJs
NodeJS实现图片上传代码(Express)
Jun 30 NodeJs
nodejs实现连接mongodb数据库的方法示例
Mar 15 NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 NodeJs
nodejs 日志模块winston的使用方法
May 02 NodeJs
nodejs搭建本地服务器并访问文件操作示例
May 11 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 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面向对象中static静态属性和静态方法的调用
2015/02/08 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
Javascript的构造函数和constructor属性
2010/01/09 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
2010/03/31 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
javascript新建标签,判断键盘输入,以及判断焦点(示例代码)
2013/11/25 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
浅析Jquery操作select
2016/12/13 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
2017/02/14 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
Node.js npm命令运行node.js脚本的方法
2018/10/10 Javascript
小程序实现锚点滑动效果
2019/09/23 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
Python3按一定数据位数格式处理bin文件的方法
2019/01/24 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
QML用PathView实现轮播图
2020/06/03 Python
Python新手学习raise用法
2020/06/03 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
Peter Alexander新西兰站:澳大利亚领先的睡衣设计师品牌
2016/12/10 全球购物
中东奢侈品市场:Coveti
2019/05/12 全球购物
开办加工厂创业计划书
2014/01/03 职场文书
土建资料员岗位职责
2014/01/04 职场文书
志愿者服务感言
2014/02/27 职场文书
一年级班主任感言
2014/03/08 职场文书
幼师求职信
2014/06/23 职场文书
毕业实习证明(4篇)
2014/10/28 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
爱岗敬业先进典型事迹材料(2016推荐版)
2016/02/26 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫
baselines示例程序train_cartpole.py的ImportError
2022/05/20 Python