当 emailVerified 为 false 时环回停止登录
Loopback stop login while emailVerified is false
我有一个自定义用户模型(用户扩展),我想实现一个经典的双重选择,并且在 emailVerified 为 false 时不允许登录,我试过像这样编写一个 afterRemote 方法
var app = loopback();
app.currentUser = false;
user.afterRemote('login', function(context, user, next) {
var UserModel = app.models.User;
UserModel.findById(user.userId, function (err, usr) {
if (err) {
return next(err);
}
if ( !usr ) {
return next(new Error('could not find a valid user'));
}
console.log('> USER SEARCH: %j', usr);
next();
});
但 UserModel 未定义。
这是在环回中实现双重选择的错误方法吗?
您需要使用 beforeRemote
挂钩,因为您想要停止登录操作,使用 afterRemote
挂钩,登录已经发生。但是,根据您共享的代码,我不确定您是如何执行此操作或将此代码放在哪里的。您似乎将钩子连接到 user
,但是您还是从 app
上取下了 User
模型?
我认为您需要扩展核心 User
模型才能做到这一点。因此,创建一个 新模型,其中 User
作为其 base
:
{
"name": "MyUser",
"base": "User",
"properties": {},
"validations": [],
"relations": {},
"acls": [],
"methods": []
}
然后在 /common/models/MyUser.js
文件中你有这个:
module.exports = function(MyUser) {
MyUser.beforeRemote('login', function(context, unused, next) {
MyUser.findOne(
// assuming they log in with their email address...
{ where: { email: context.req.body.email } },
function (err, user) {
if (err || !user) {
return next(err || (new Error('No user found')));
}
if (!user.emailVerified) {
return next(new Error('You need to verify your email first!'));
}
next();
});
};
我有一个自定义用户模型(用户扩展),我想实现一个经典的双重选择,并且在 emailVerified 为 false 时不允许登录,我试过像这样编写一个 afterRemote 方法
var app = loopback();
app.currentUser = false;
user.afterRemote('login', function(context, user, next) {
var UserModel = app.models.User;
UserModel.findById(user.userId, function (err, usr) {
if (err) {
return next(err);
}
if ( !usr ) {
return next(new Error('could not find a valid user'));
}
console.log('> USER SEARCH: %j', usr);
next();
});
但 UserModel 未定义。
这是在环回中实现双重选择的错误方法吗?
您需要使用 beforeRemote
挂钩,因为您想要停止登录操作,使用 afterRemote
挂钩,登录已经发生。但是,根据您共享的代码,我不确定您是如何执行此操作或将此代码放在哪里的。您似乎将钩子连接到 user
,但是您还是从 app
上取下了 User
模型?
我认为您需要扩展核心 User
模型才能做到这一点。因此,创建一个 新模型,其中 User
作为其 base
:
{
"name": "MyUser",
"base": "User",
"properties": {},
"validations": [],
"relations": {},
"acls": [],
"methods": []
}
然后在 /common/models/MyUser.js
文件中你有这个:
module.exports = function(MyUser) {
MyUser.beforeRemote('login', function(context, unused, next) {
MyUser.findOne(
// assuming they log in with their email address...
{ where: { email: context.req.body.email } },
function (err, user) {
if (err || !user) {
return next(err || (new Error('No user found')));
}
if (!user.emailVerified) {
return next(new Error('You need to verify your email first!'));
}
next();
});
};