【问题标题】:What is the best way to add another step in to everyauth?在everyauth中添加另一个步骤的最佳方法是什么?
【发布时间】:2012-12-08 10:43:59
【问题描述】:

我想在everyauth openid module 中定义的 OpenId 身份验证序列中再添加一个步骤。

我不确定everyauth 是否是为此而设计的。作者mentions说它是可定制的,但没有例子,我还是一个javascript新手。

例如,everyauth 中的 OAuth 模块定义其身份验证回调步骤如下:

.get('callbackPath',                                                                                                                                               
     'the callback path that the 3rd party OAuth provider redirects to after an OAuth authorization result - e.g., "/auth/facebook/callback"')                     
  .step('getCode')
    .description('retrieves a verifier code from the url query')                                                                                                   
    .accepts('req res')  
    .promises('code')                                                       
    .canBreakTo('authCallbackErrorSteps')
  .step('getAccessToken')
    .accepts('code')
    .promises('accessToken extra')                                                                                                                                 
  .step('fetchOAuthUser')
    .accepts('accessToken')                                                                                                                                        
    .promises('oauthUser')
  .step('getSession')
    .accepts('req')
    .promises('session')
  .step('findOrCreateUser')                                                                                                                                        
    .accepts('session accessToken extra oauthUser')                                                                                                                
    .promises('user')
  .step('compile')
    .accepts('accessToken extra oauthUser user')
    .promises('auth')
  .step('addToSession')
    .accepts('session auth')                                                                                                                                       
    .promises(null)
  .step('sendResponse')
    .accepts('res')
    .promises(null)

如果我需要额外的自定义步骤,我应该怎么做?我宁愿不更改everyauth 模块源代码。

【问题讨论】:

    标签: javascript node.js everyauth


    【解决方案1】:

    这个问题被提出已经有一段时间了,但没有答案。我刚才遇到了同样的挑战,并记录了我的答案,以造福像我这样的其他节点菜鸟:)

    我正在使用 Facebook 身份验证,并且想在身份验证成功后向客户端发送响应之前进行一些自定义处理。我没有添加另一个步骤,而是覆盖了步骤“sendResponse”,添加了我的自定义逻辑,然后委托给了超级“sendResponse”实现。现在我的代码看起来像 -

    everyauth
        .facebook
        .sendResponse(function(res) {
            console.log('##### sendResponse custom step called #####');
            // --> Your custom logic here
            this._super();
        });
    

    您可以为特定模块(如上图所示的 facebook)覆盖它,也可以在“每个模块”级别完成。

    希望这会有所帮助。

    【讨论】:

    • 看起来是一个不错的解决方案,我将在我的项目中尝试一下。我们也面临着类似的挑战。
    【解决方案2】:

    另一个选项是addToSession 步骤。它在 facebook、linkedin 和密码模块中可用。我发现sendResponse 不适用于密码模块。如果您的自定义逻辑依赖于会话变量,这会简化事情。

    【讨论】:

      猜你喜欢
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      • 2019-06-25
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 2020-09-27
      相关资源
      最近更新 更多