如何从auth0规则重定向时识别当前用户

时间:2017-10-06 15:33:02

标签: authentication auth0

我的身份验证流程如下......

  1. 用户访问我的网站并点击登录。
  2. 他们被重定向到mydomain.auth0.com(或类似的东西),在那里他们被提示使用用户名或密码或社交提供者登录,例如谷歌。
  3. 在用户登录后,我在Auth0中运行自定义规则以检测他们是否是新用户。如果yes我现在想将它们重定向到自定义页面以收集一些其他数据。我这样做是在规则中实现以下内容:

    function(user,context,callback){   context.redirect = {         网址:' http://www.example.com/profile'     };

    回调(null,user,context); }

  4. 这会将用户重定向回我的网站,在查询字符串中添加?state=xyz...

    但是,此时我没有令牌或身份令牌,似乎无法识别用户。

    Auth0上给出的示例讨论了如何使用此流程强制用户在登录时更新其密码。但是,为了使其工作,必须有一些方法来识别他们被重定向到的页面上的用户。

    让这项工作最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

以下是规则中的一个片段,用于将用户重定向到后验证注册页面。只需粘贴与更改context.redirect相关的部分,因为这就是您所询问的内容。

var hasPostRegistered = user.app_metadata && user.app_metadata.has_post_registered;

  // redirect to consent form if user has not yet consented
  if (!hasPostRegistered && context.protocol !== 'redirect-callback') {

    var auth0Domain = auth0.baseUrl.match(/([^:]*:\/\/)?([^\/]+\.[^\/]+)/)[2];
    var userId = user.user_id;

    context.redirect = {
      url: configuration.REGISTRATION_FORM_URL +
      (configuration.REGISTRATION_FORM_URL.indexOf('?') === -1 ? '?' : '&') +
      'auth0_domain=' + encodeURIComponent(auth0Domain) +
      '&user_id=' + encodeURIComponent(userId)
    };

  }

注意user_id如何被标记为查询参数。

另请注意,您可以在规则中对JWT令牌进行自签名,然后将其发送到重定向端点,该端点又可以配置为读取/验证JWT令牌以确保重定向的安全。