2017-10-06 62 views
1

我的認證流程如下重定向時識別當前用戶...如何從auth0規則

  1. 用戶訪問我的網站,點擊登錄。
  2. 他們被重定向到mydomain.auth0.com(或類似的東西),在那裏他們被提示使用用戶名或密碼或社交提供者登錄,例如,谷歌。
  3. 在用戶登錄後,我在Auth0中運行自定義規則以檢測它們是否爲新用戶。如果yes我現在想將它們重定向到一個自定義頁面來收集一些額外的數據。我這樣做,我實現在規則如下:

    功能(用戶,上下文,回調){ context.redirect = { 網址: 'http://www.example.com/profile' };

    callback(null,user,context); }

這將用戶重定向回我的網站添加到?state=xyz...查詢字符串。

但是,在這一點上,我沒有令牌或標識令牌,看起來沒有辦法識別用戶。

在Auth0中給出的示例講述瞭如何使用此流程強制用戶在登錄時更新密碼。然而,爲了這個工作,必須有一些方法來識別他們被重定向到的頁面上的用戶。

讓這項工作最好的方法是什麼?

回答

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令牌,以此作爲保護重定向的方式。