内容简介:你是否和我一样,在对接后端大佬的接口时,对于请求头你是否和我一样,在向node后端领域扩展时,对于用户登陆注册授权感到挠头;你是否和我一样,在浏览器访问某个页面时,对于访问权限控制感到好奇;
你是否和我一样,在对接后端大佬的接口时,对于请求头 authorization
认证感到疑惑;
你是否和我一样,在向node后端领域扩展时,对于用户登陆注册授权感到挠头;
你是否和我一样,在浏览器访问某个页面时,对于访问权限控制感到好奇;
那么,请花上几分钟时间阅读,让下文来帮你解惑。
本文主要通过express来实现用户登陆授权的逻辑,这里的JWT只是一个标准,全称:JSON Web Token。有兴趣的小伙伴可以去这官网加深了解。
初始配置
初始化一个express项目,配置数据库连接和加载bodyParser插件。
//connect mongoDB let mongoose = require('mongoose'); let mongoURL = 'mongodb://localhost/dataBase'; mongoose.connect(mongoURL); mongoose.Promise = global.Promise; let db = mongoose.connection; db.on('error',console.error.bind(console, 'MongoDB connection error:')); let bodyParser = require('body-parser'); // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })); // parse application/json app.use(bodyParser.json()); 复制代码
用户注册
编写用户model
用于连接数据库的数据Schema模型
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var AuthSchema = new Schema({ username: String, userpswd: String }); // 参数:导出模块名称、Schema实例、数据表名称 module.exports = mongoose.model('AuthInfo', AuthSchema, 'authinfo'); 复制代码
编写注册route
基于restful API的接口路由
var express = require('express'); var router = express.Router(); var bodyParser = require('body-parser'); var mongoose = require('mongoose'); var AuthInfo = require('../models/authModel'); // 导入model模块 router.post('/',function(req, res, next){ console.log('open post register'); var username = req.body.username; var password = req.body.password; //是否合法的参数 if (username == null || username.trim() == '' || password == null || password.trim() == '') { res.send({code: 500, message: '用户名密码不能为空'}) return } // md5 var md5String = require('crypto').createHash('md5').update(password).digest('hex'); //验证账号是否存在 var queryString = {username: username}; res.set({'Content-type': 'application/json;charset=utf-8'}); AuthInfo.findOne(queryString).then(data => { return new Promise((resolve, reject)=>{ if(data){ res.send({code: 500, message: '用户已经注册'}); reject(); }else{ resolve(); } }).then(()=>{ //保存 return new AuthInfo({ username: username, password: md5String }).save(); }).then(data => { if(data){ //返回 res.send({code: 1, message: '注册成功'}) return; } // 返回 res.send({code: 500, message: '注册失败'}); }).catch(err => { // 异常 if(err){ res.status(500).send(err); console.log(err); } }) }) }); module.exports = router; 复制代码
编写登陆route
基于restful API的接口路由
var express = require('express'); var router = express.Router(); var bodyParser = require('body-parser'); var mongoose = require('mongoose'); var AuthInfo = require('../models/authModel'); router.post('/',function(req, res, next){ var username = req.body.username; var password = req.body.password; //是否合法的参数 if (username == null || username.trim() == '' || password == null || password.trim() == '') { res.send({code: 500, message: '用户名密码不能为空'}) return } var md5String = require('crypto').createHash('md5').update(password).digest('hex'); // md5 //验证账号是否存在 var queryString = {username: username, userpswd: md5String}; res.set({'Content-type': 'application/json;charset=utf-8'}); // md5 token var tokenString = require('crypto').createHash('md5').update(JSON.stringify(queryString)).digest('hex'); AuthInfo.findOne(queryString).then(data => { return new Promise((resolve, reject)=>{ if(data){ resolve(data); }else{ res.send({code: 500, message: '用户名或密码错误'}) reject(); } }).then(data => { console.log(data); res.send({ code: 1, message: '登陆成功', token: tokenString }) }) }).catch( err => { if(err){ res.status(500).send(err); console.log(err); } }) }); module.exports = router; 复制代码
这里和注册不同的是我们需要把从前端页面接收到的密码通过MD5转换才能用于数据库查询,因为数据库的密码字段也正是存着MD5转换过后的字符,当查询成功之后,我们还需要通过对刚才登陆的表单字段对象进行字符串转换,然后再通过MD加密后作为token返回给客户端。
本文参考: juejin.im/post/5c2a2f…
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Visual C# 2008入门经典
James Foxall / 张劼 / 人民邮电出版社 / 2009-6 / 39.00元
《Visual C#2008入门经典》分为五部分,共24章。第一部分介绍了Visual C# 2008速成版开发环境,引导读者熟练使用该IDE;第二部分探讨如何创建应用程序界面,包含窗体和各种控件的用法;第三部分介绍了编程技术,包括编写和调用方法、处理数值、字符串和日期、决策和循环结构、代码调试、类和对象的创建以及图形绘制等;第四部分阐述了文件和注册表的处理、数据库的使用和自动化其他应用程序等;第......一起来看看 《Visual C# 2008入门经典》 这本书的介绍吧!