我正在Auth0中编写规则,以便在满足特定条件时触发验证电子邮件。为了使示例变小,我已经包含了用于发送验证邮件的代码(我删除了不需要的代码)。
var url = 'https://myname.au.auth0.com/api/v2/jobs/verification-email';
var token = 'Bearer {{token}}'; //This is where the problem is how do I get the token
var userId = user.user_id;
request.post({
url: url,
headers: {
Authorization: 'Bearer {{token}}',
},
json: {
"user_id": user.user_ID
},
timeout: 5000
},
function(err, res, body) {
console.log(err);
console.log(res);
});
在身体中我收到以下错误
{ statusCode: 400,
error: 'Bad Request',
message: 'Bad HTTP authentication header format',
errorCode: 'Bearer' }
我想我需要传入访问令牌或类似标题中的内容。我该如何完成这项工作?
我还看到了以下文章(https://auth0.com/docs/email/custom),但我不确定secretToken
是什么?
答案 0 :(得分:1)
从底部开始,文章(https://auth0.com/docs/email/custom)针对的是需要额外灵活性并使用自己的自定义电子邮件处理的用户。这个例子中的secretToken
只是为了说明一种可能 - 而且非常简单 - 他们自己的自定义电子邮件API可以验证他们是从Auth0调用的方式;总之,它几乎可以作为API密钥使用。
如果您只需要通过Auth0提供的系统触发验证电子邮件,那么您将使用正确的方法(Management API v2)。您有多种方法可以获取允许您调用此API的令牌:
第二个选项是最容易上手的选项,但要考虑到那个选项的弃用通知。
获得令牌后,您还需要将其正确传递给API。您展示的代码可能只是示例代码,但请确保您最终不会包含Bearer
方案两次,更具体地说var token = 'Bearer {{token}}';
应该只是var token = '{{token}}';
然后在创建HTTP标头时,您将使用token
变量。
答案 1 :(得分:0)
使用错误令牌时收到了同样的错误,但是对于不同的api调用。我使用通过调用access_token
获得的用户{{api-audience}}users/{{user_id}}
重新创建了您的问题。该令牌应如下所示:A1bCd2efg34IJkl5
尝试使用通过拨打电话获得的客户access_token
:
curl --request POST \
--url https://{{domain}}/oauth/token \
--header 'content-type: application/json' \
--data '{
"client_id":"{{client_id}}",
"client_secret":"{{client_secret}}",
"audience":"{{audience}}",
"grant_type":"client_credentials"
}'
该令牌将是一个完整的JWT。
答案 2 :(得分:0)
刚刚创建了以下空规则,当用户尝试登录并且电子邮件尚未经过验证时,它将被调用,并且它就像魅力一样:D
function (user, context, callback) {
if (!user.email_verified) {
console.log("User is: " + user.user_id);
var ManagementClient = require('auth0@2.6.0').ManagementClient;
var management = new ManagementClient({
token: auth0.accessToken,
domain: auth0.domain
});
var new_userobj = {user_id:user.user_id};
management.sendEmailVerification(new_userobj,callback(new UnauthorizedError('Please click on the link in the email we have sent you to continue to login.')));
} else {
return callback(null, user, context);
}
}