验证码而不是环回中的url
Verification code rather than url in loopback
我正在使用 Loopback 作为 api 用于 phone 应用程序。
如何在用户注册时更改电子邮件地址的开箱即用验证。我需要它是一个 4 位代码(而不是 url),这样它对用户在应用程序中验证他们的帐户更加友好。
即。然后他们只需要输入 4 位数字来确认注册
有几种方法可以做到这一点,但基本上归结为重写 the user.verify()
方法(或其中的一部分)。如果您单击上面的 link 并向下滚动一点,您将看到 LoopBack 如何使用 crypto.randomBytes()
方法生成存储在用户对象上的 verificationToken
,然后它通过电子邮件将其发送给用户。我们可以在扩展 user
的 "submodel" 中覆盖此方法,然后自己实现它,但请注意,您将复制大量信息。
就是说,我已经 submitted a PR 使用 LoopBack 来简化这件事。查看 link,您可以了解将来 可能 是如何完成的(如果 PR 没有更改)。
现在,您必须覆盖 verify()
方法:
User.prototype.verify = function(options, fn) {
var user = this;
// do a lot of audits and other stuff (check the current source)...
// Set the token any way you like...
user.verificationToken = "123456"; // <-- this probably isn't a good way
user.save(function(err) {
if (err) {
fn(err);
} else {
sendEmail(user);
}
});
function sendEmail(user) {
// you should be able to keep this exactly as it is in the source...
}
};
当然,不要忘记阅读 LoopBack 文档中的 verifying user email addresses!
另一种选择是pass the token generation function to the options object. You can see how it's used if you scroll down a bit。
有关如何覆盖用户模型并将选项对象传递给 verify()
方法的步骤。
您可以在创建新用户后在远程挂钩中执行此操作,例如:
User.afterRemote('create', function(context, user, next) {
var userModel = User.constructor;
myTokenGenerator = function(user, cb) {
myToken = '1234'
cb(null, myToken);
};
var options = {
type: 'email',
mailer: Email,
to: user.email,
from: senderEmail,
subject: 'My subject',
template: path.resolve(__dirname, '../views/verify.ejs'),
user: user,
host: myEmailHost,
port: myEmailPort,
generateVerificationToken: myTokenGenerator
};
user.verify(options, function(err, response) {
if (err) {
next(err);
return;
}
console.log("Account verification email sent to " + options.to);
next();
return;
});
});
我正在使用 Loopback 作为 api 用于 phone 应用程序。
如何在用户注册时更改电子邮件地址的开箱即用验证。我需要它是一个 4 位代码(而不是 url),这样它对用户在应用程序中验证他们的帐户更加友好。
即。然后他们只需要输入 4 位数字来确认注册
有几种方法可以做到这一点,但基本上归结为重写 the user.verify()
方法(或其中的一部分)。如果您单击上面的 link 并向下滚动一点,您将看到 LoopBack 如何使用 crypto.randomBytes()
方法生成存储在用户对象上的 verificationToken
,然后它通过电子邮件将其发送给用户。我们可以在扩展 user
的 "submodel" 中覆盖此方法,然后自己实现它,但请注意,您将复制大量信息。
就是说,我已经 submitted a PR 使用 LoopBack 来简化这件事。查看 link,您可以了解将来 可能 是如何完成的(如果 PR 没有更改)。
现在,您必须覆盖 verify()
方法:
User.prototype.verify = function(options, fn) {
var user = this;
// do a lot of audits and other stuff (check the current source)...
// Set the token any way you like...
user.verificationToken = "123456"; // <-- this probably isn't a good way
user.save(function(err) {
if (err) {
fn(err);
} else {
sendEmail(user);
}
});
function sendEmail(user) {
// you should be able to keep this exactly as it is in the source...
}
};
当然,不要忘记阅读 LoopBack 文档中的 verifying user email addresses!
另一种选择是pass the token generation function to the options object. You can see how it's used if you scroll down a bit。
verify()
方法的步骤。
您可以在创建新用户后在远程挂钩中执行此操作,例如:
User.afterRemote('create', function(context, user, next) {
var userModel = User.constructor;
myTokenGenerator = function(user, cb) {
myToken = '1234'
cb(null, myToken);
};
var options = {
type: 'email',
mailer: Email,
to: user.email,
from: senderEmail,
subject: 'My subject',
template: path.resolve(__dirname, '../views/verify.ejs'),
user: user,
host: myEmailHost,
port: myEmailPort,
generateVerificationToken: myTokenGenerator
};
user.verify(options, function(err, response) {
if (err) {
next(err);
return;
}
console.log("Account verification email sent to " + options.to);
next();
return;
});
});