gpt4 book ai didi

node.js - 在环回中执行某些操作 'before' 登录

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:04 26 4
gpt4 key购买 nike

我对环回还很陌生,这就是我正在做的事情:

我正在使用环回提供的标准登录路由来登录用户 - 将基本用户扩展到我自己的模型,例如 orgadmin。

通过预先构建的路由/api/orgadmin/login,我可以轻松登录。

现在,我在组织管理员中有一个标记为“状态”,可以是“事件”或“非事件”,根据它我必须推迟用户登录。

我正在考虑使用像 beforeRemote 这样的远程钩子(Hook),如下所示,但它不起作用:

//this file is in the boot directory
module.exports = function(orgadmin) {
orgadmin.beforeRemote('login', function(context, user, next) {
console.log(user)
// context.args.data.date = Date.now();
// context.args.data.publisherId = context.req.accessToken.userId;
next();
});
};

那么实现这一目标的最佳方法是什么?

最佳答案

仅当请求带有有效的访问 token 时,user 属性才可用。该属性不用于未经身份验证的请求,即 login

这是一个可能的替代方案:

module.exports = (OrgAdmin) => {
OrgAdmin.on('dataSourceAttached', () => {
const { login } = OrgAdmin;
OrgAdmin.login = async (credentials, include) => {
const accessToken = await login.call(OrgAdmin, credentials, include);
const orgAdmin = await OrgAdmin.findById(accessToken.userId);
if (orgAdmin.status !== 'active') {
OrgAdmin.logout(accessToken);
const err = new Error('Your account has not been activated');
err.code = 'NOT_ACTIVE_USER';
err.statusCode = 403;
throw err
}
return accessToken;
};
});
};

上面的代码重写了login方法并执行以下操作:

  1. 使用 Loopback 的内置登录名登录用户
  2. 获取login的响应(这是一个访问 token ),并使用它来获取用户。
  3. 如果用户处于事件状态,则返回访问 token ,满足登录的预期成功响应。
  4. 如果用户不活跃,请删除创建的访问 token (这就是 logout 的作用),并抛出错误。

关于node.js - 在环回中执行某些操作 'before' 登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49009402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com