内容简介:你是否和我一样,在对接后端大佬的接口时,对于请求头你是否和我一样,在向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…
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java语言程序设计
(美) Y. Daniel Liang / 李娜 / 机械工业出版社 / 2011-6 / 79.00元
本书是Java语言的经典教材,畅销多年不衰。本书全面整合了Java的特性,采用“先讲基础”的教学方式,循序渐进地介绍了程序设计基础、面向对象程序设计、GUI程序设计等。另外,本书还全面且深入地覆盖了一些高级主题,包括算法和数据结构、并发、网络、国际化、高级GUI、数据库和Web程序设计等。 本书中文版由《Java语言程序设计 基础篇》和《Java语言程序设计 进阶篇》组成。基础篇对应原书的第......一起来看看 《Java语言程序设计》 这本书的介绍吧!