@tntd/sso-login

1.0.1 • Public • Published

sso-longin koa 统一登录中间件


安装

npm i -g @tntd/sso-login 

使用

const Koa = require('koa');
const ssoLogin = require('@tntd/sso-login ');
const app = new Koa();

app.use(ssoLogin(options)); // options 为 JSON object

options

key 是否必填 描述
rsaKey E-hr node 解密key
logoutUrl 退出接口,默认 '/api/logout'
loginUrl 登录页面地址,参考下面统一登录
ehrapi 参考 ehrapi 描述

ehrapi 描述

ehrapi = { 
	host: "",  
	url: '/ehrapi/empinfo',  // 建议不填,除非接口地址变更了
	token: ""
}

上下文挂载用户信息

ctx.session.user = {
    sso: true,
    ehrId: '',
    badge: '',
    nickname: '',
    empStatus: '',
    email: '',
    account: '',
    depId: '',
    leaderId: '',
    roleId: ''
};

字段描述 具体类型,参考返回值

字段 类型 是否为空 说明
sso Boolean 上下文二次挂载用户新标识,默认 true
ehrId int 员工ID
badge String 员工工号
nickname String 员工姓名
empStatus int 在职状态:1-在职;2-离职
email String email
account String AD账号
depId String 所在部门id
leaderId int 直接汇报对象人员ID
roleId int 在职状态:1-在职;2-离职

二次上下文挂载当前系统用户信息

format-session.js 中间件

const UserDao = require('daos/user');
const userDao = new UserDao();

module.exports = (options = {}) => {
	return async (ctx, next) => {
		if (ctx.session && ctx.session.user && ctx.session.user.sso) { // sso 标识
			let userOne = await userDao.findOne({
				where: {
					account: ctx.session.user.account
				}
			});// 根据域账号 获取用户信息
			if (!userOne) {// 当前系统没用找到用户,立即新增用户
				userOne = await userDao.create({ ...ctx.session.user });
			}
			ctx.session.user = {
				...userOne.dataValues,
				password: undefined
			};
		}
		await next();
	};
};
const Koa = require('koa');
const ssoLogin = require('@tntd/sso-login ');
const app = new Koa();

app.use(ssoLogin(options)); // options 为 JSON object
app.use(formatSession());// 上面的中间件 format-session.js

前端

401 跳转登录

const goToLogin = (url, params = {}) => {
    params.callbackUrl = params.callbackUrl || location.href;
    window.location.href = `${url || config.ssoLoginUrl}?tokenEncoding=true&callbackUrl=${params.callbackUrl}`;
};

退出登录

import { stringify } from 'query-string';

const logout = (params = {}) => {
	params.backUrl = params.backUrl || location.href;
	window.location.href = `/api/logout?${stringify(params)}`;
};

前后端工程分开项目

import { searchToObject } from '@/utils'; // URL format对象
import { stringify } from 'query-string';

// 统一登录 token 判断 本地开发使用,线上不会进 if
const { token, ...rest } = searchToObject(location.search);
const backUrl = `${location.protocol}//${location.host}${location.pathname}?${stringify(rest)}`;
if (token) {
    location.href = `/api/login?token=${encodeURIComponent(token)}&backUrl=${encodeURIComponent(backUrl)}`;
}

Readme

Keywords

Package Sidebar

Install

npm i @tntd/sso-login

Weekly Downloads

6

Version

1.0.1

License

none

Unpacked Size

7.79 kB

Total Files

4

Last publish

Collaborators

  • kobingogo
  • mcfly001
  • z337198954
  • td-tnt
  • bruceliu68
  • bernardzhang
  • mizy
  • zhouzefei
  • xiaofei.wang
  • anthonyli
  • popoqaq
  • ezios