koa 实现session登陆
在我们访问一些网站内部内容的时候,通常都会先验证我们是否已经登陆,如果登陆了就跳转到内容页面否则就跳转或者弹出登陆页面。
但是HTTP协议是没有状态的协议,无法标识一个用户的登录状态。
于是Cookies和Session的应用就很好的解决了这个问题。
koa实现session登陆的方法很简单,首先引入依赖'koa-session'
const session = require('koa-session');
配置session参数
//session配置
const session_signed_key = ["some secret hurr"]; // 这个是配合signed属性的签名key
const sessionConfig = {
key: 'koa:sess', //cookie key (default is koa:sess)
maxAge: 1800000, // 过期时间(毫秒) maxAge in ms (default is 1 days)
overwrite: true, //是否可以overwrite (默认default true)
httpOnly: true, //cookie是否只有服务器端可以访问 httpOnly or not (default true)
signed: true, //签名默认true
rolling: false, //在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
renew: false, //(boolean) renew session when session is nearly expired,
};
加载中间件(一定要注意中间件的加载顺序)
app.keys = session_signed_key;
app.use(session(CONFIG, app));
登录接口部分
/**
* 登陆
* @author Shellcoochi
* @param ctx
* @param next
* @returns {Promise<void>}
*/
let fn_sign_in = async (ctx, next) => {
let name = ctx.request.body.username || '',
password = ctx.request.body.password || '';
console.log(`signin with name: ${name}, password: ${password}`);
if (name === 'Shellcoochi' && password === '12345') {
//设置session
ctx.session.userState = true;
ctx.session.username = name; ctx.response.body = {
state:'success',
msg:'登陆成功'
};
console.log('登陆成功');
} else {
ctx.response.body = {state:'defeat'};
}
};
设置session的同时我们也可以设置前端的Cookies
/**
* 登陆
* @author Shellcoochi
* @param ctx
* @param next
* @returns {Promise<void>}
*/
let fn_sign_in = async (ctx, next) => {
let name = ctx.request.body.username || '',
password = ctx.request.body.password || '';
console.log(`signin with name: ${name}, password: ${password}`);
if (name === 'Shellcoochi' && password === '12345') {
//设置session
ctx.session.userState = true;
ctx.session.username = name;
//设置cookie
ctx.cookies.set(
'shellcoochi@',//name
'mytoken@', //value(可替换为token)
cookieConfig
);
ctx.response.body = {
state:'success',
msg:'登陆成功'
};
console.log('登陆成功');
} else {
ctx.response.body = {state:'defeat'};
}
};
Cookies相关配置
注:每一个域名都有自己对应的Cookies,如果两个域名同属于一个域名的二级域名
可以设置他们的domain为一级域名,这样两个二级域名都可以访问到一级域名的Cookies,实现在一级域名相同的情况下的Cookies的“跨域”操作
//cookie配置
const cookieConfig = {
domain: 'localhost', // 写cookie所在的域名
path: '/', // 写cookie所在的路径
maxAge: 1800000, // cookie有效时长
// expires: new Date('2017-02-15'), // cookie失效时间
httpOnly: false, // 是否只用于http请求中获取
overwrite: false // 是否允许重写
}
如果当前用户处于登录状态许访问后台接口,或者正在访问不需要登陆就可以访问的接口,则允许通过,否则不允许访问。
我们可以在一个访问进入路由前加一个简单的拦截器
const allowpage = ['/node/signin']//允许直接访问的接口
module.exports = function(ctx, next){
let url = ctx.originalUrl;
if(allowpage.indexOf(url)>-1){
console.log("正在登陆。。。");
}else if(ctx.session.userState){
console.log("正在访问接口:"+url);
}else{
console.log("session 已失效,请重新登录");
ctx.redirect(null);
}
};
删除session
/**
* 登出
* @author Shellcoochi
* @param ctx
* @param next
* @returns {Promise<void>}
*/
let fn_sign_out = async (ctx,next)=>{
if(ctx.session){
ctx.session =null;//清空session
ctx.response.body = {
state:'success',
msg:'登出成功'
}
console.log('登出成功')
}else{
ctx.response.body = {
state:'defeat',
msg:'session 已失效'
}
console.log("当前 session 已失效");
}
};
koa 实现session登陆的更多相关文章
- Cookie、Session登陆验证相关介绍和用法
一.Cookie和Session 首先.HTTP协议是无状态的:所谓的无状态是指每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应直接影响,也不会直接 ...
- .Net core 使用特性Attribute验证Session登陆状态
1.新建一个.net core mvc项目 2.在Models文件夹下面添加一个类MyAttribute,专门用来保存我们定义的特性 在这里我只写了CheckLoginAttribute用来验证登陆情 ...
- koa 基础(十六)koa 中 session 的使用
1.app.js /** * koa 中 session 的使用 * 1.npm install koa-session --save * 2.const session = require('koa ...
- session 登陆浏览,并实现session注销登陆
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- 装饰器实现session登陆 验证功能
装饰器 登陆验证功能 1.装饰器模板 from django.shortcuts import render, redirect, HttpResponse from django.conf impo ...
- PHP登陆Session验证
关键字:PHP Session 登陆 验证 本文地址:http://www.cnblogs.com/txw1958/p/php-login-check-session.html 首先,在MySQL数据 ...
- KoaHub平台基于Node.js开发的Koa的get/set session插件代码详情
koa-session2 Middleware for Koa2 to get/set session use with custom stores such as Redis or mongodb ...
- Koa Session的使用
Session 简单介绍 session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服务器上. Session 的工作流程 当浏览器访问服务器 ...
- Koa2学习(八)使用session
Koa2学习(八)使用session koa2框架不提供session的处理方法,这里我们需要借助一个第三方中间件koa-session来处理session. 先安装插件: $ npm i koa-s ...
随机推荐
- 强悍的Python读取大文件的解决方案
这是一道著名的 Python 面试题,考察的问题是,Python 读取大文件和一般规模的文件时的区别,也即哪些接口不适合读取大文件. 1. read() 接口的问题 f =open(filename, ...
- GPS模块编程之NMEA0183协议
NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备制定的标准格式.现在已经成为GPS导航设备统一的RTCM(Rad ...
- 阶段5 3.微服务项目【学成在线】_day04 页面静态化_02-freemarker介绍
- double,float,BigDecimal类型数值的操作
float四舍五入保留两位小数 /** * float四舍五入保留两位小数 * */ public static float formatDecimal(float n) { return (Math ...
- 开发CLI命令行
命令行工具:CLI 是在命令行终端使用的工具,如git, npm, vim 都是CLI工具.比如我们可以通过 git clone 等命令简单把远程代码复制到本地 和 cli 相对的是图形用户界面(gu ...
- 使用xhprof进行线上PHP性能追踪及分析
转自: http://avnpc.com/pages/profiler-php-performance-online-by-xhprof
- golang web框架设计5:配置设计
配置信息的解析,实现的是一个key=value,键值对的一个配置文件,类似于ini的配置格式,然后解析这个文件,把解析的数据保存到map中,最后调用的时候通过几个string,int之类的函数返回相应 ...
- centos7:ssh免密登陆设置
1.使用root用户登录,进入到目录/root/.ssh 2.执行命令:ssh-keygen -t rsa 一路回车,完成后会在目录/root/.ssh下面生成文件 id_rsa和id_rsa.pub ...
- CJL.0.1.js
/*! * Cloudgamer JavaScript Library v0.1 * Copyright (c) 2009 cloudgamer * Blog: http://cloudgamer.c ...
- 34.TCP非阻塞连接及套接字异常处理丶端口扫描脚本
TCP非阻塞及套接字异常处理: TCP阻塞套接字异常捕获: 套接字创建失败,8000 socket.error 客户端连接错误: ConnectionRefusedError socket.gaier ...