如何调用Management API v2从规则中发送验证邮件?

时间:2016-12-19 03:34:11

标签: rule auth0 email-verification

我正在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是什么?

3 个答案:

答案 0 :(得分:1)

从底部开始,文章(https://auth0.com/docs/email/custom)针对的是需要额外灵活性并使用自己的自定义电子邮件处理的用户。这个例子中的secretToken只是为了说明一种可能 - 而且非常简单 - 他们自己的自定义电子邮件API可以验证他们是从Auth0调用的方式;总之,它几乎可以作为API密钥使用。

如果您只需要通过Auth0提供的系统触发验证电子邮件,那么您将使用正确的方法(Management API v2)。您有多种方法可以获取允许您调用此API的令牌:

  1. Using the client credentials grant
  2. Using the Auth0 Management API v2 Explorer
  3. 第二个选项是最容易上手的选项,但要考虑到那个选项的弃用通知。

    获得令牌后,您还需要将其正确传递给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);
      }
    }