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全栈框架StrongLoop推荐
Nov 09 NodeJs
nodejs中实现阻塞实例
Mar 24 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
nodejs入门教程五:连接数据库的方法分析
Apr 24 NodeJs
详解HTTPS 的原理和 NodeJS 的实现
Jul 04 NodeJs
nodejs操作mongodb的填删改查模块的制作及引入实例
Jan 02 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
手把手教你如何使用nodejs编写cli命令行
Nov 05 NodeJs
详解NodeJS Https HSM双向认证实现
Mar 12 NodeJs
nodejs中实现用户注册路由功能
May 20 NodeJs
5分钟教你用nodeJS手写一个mock数据服务器的方法
Sep 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
第九节 绑定 [9]
2006/10/09 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
2018/01/15 PHP
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
jQuery 开天辟地入门篇一
2009/12/09 Javascript
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
2014/10/08 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
Javascript基础教程之break和continue语句
2015/01/18 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
Underscore源码分析
2015/12/30 Javascript
javascript事件模型介绍
2016/05/31 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
jQuery的Each比JS原生for循环性能慢很多的原因
2016/07/05 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
2017/04/20 Javascript
vue.js组件之间传递数据的方法
2017/07/10 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
2017/12/11 Javascript
详解如何用babel转换es6的class语法
2018/04/03 Javascript
jQuery解析json格式数据示例
2018/09/01 jQuery
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
python从入门到精通(DAY 3)
2015/12/20 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
Python根据成绩分析系统浅析
2019/02/11 Python
HTML5移动端手机网站开发流程
2016/04/25 HTML / CSS
anello泰国官方网站:日本流行包包品牌
2019/08/08 全球购物
办理房产证委托书
2014/09/18 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
默认网关不可用修复后过一会又不好使了解决方法
2022/04/08 数码科技