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
key | 是否必填 | 描述 |
---|---|---|
rsaKey | 否 | E-hr node 解密key |
logoutUrl | 否 | 退出接口,默认 '/api/logout' |
loginUrl | 是 | 登录页面地址,参考下面统一登录 |
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-离职 |
String | 否 | ||
account | String | 否 | AD账号 |
depId | String | 否 | 所在部门id |
leaderId | int | 否 | 直接汇报对象人员ID |
roleId | int | 否 | 在职状态:1-在职;2-离职 |
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
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)}`;
}