2015 年重新审视 Ember Handling 401

2024-05-11

我可以在 Ember/Ember Data 中找到大量询问/回答如何从 Rails 后端处理 401 的老问题。许多(如果不是全部的话)在这一点上似乎已经过时了。我已经尝试了我能找到的一切。 (Ember-数据处理 401 https://stackoverflow.com/questions/17981563/ember-data-handling-401-s)

但无论我做什么,我都会在控制台中不断收到 401 错误,而我的代码中永远不会捕获 401 错误。我想要做的就是如果在任何地方/模型/任何地方遇到 401 则将重定向添加到“/”。我不需要任何身份验证或其他任何检查。

我尝试将其添加到应用程序路由操作以及路由器本身。

error: function (error, transition) {
  console.log("err: " + error.status);
  if (error && error.status === 401) {
    return this.transitionToRoute('/');
  }
}

我也尝试过这个的几种变体https://stackoverflow.com/a/19063009/1850353 https://stackoverflow.com/a/19063009/1850353.

App.ApplicationAdapter = DS.RESTAdapter.extend({
  ajaxError: function(jqXHR) {
    var error = this._super(jqXHR);
    console.log("jqXHR: " + jqXHR.status);
    if (jqXHR && jqXHR.status === 401) {
      #handle the 401 error
    }
    return error;
  }
});

我显然是一个菜鸟,所以也许我在这里错过了一些简单的东西。我的 console.log 都不会被触发,除非它是为了我试图让它工作而引入的新错误。是否有当前的“最佳实践”风格的方法来做到这一点?


这里的其他两个答案都很好并且可以正常工作,但恕我直言,有一些不受欢迎的警告。

我强烈建议实施Ember.onerror钩。任何未处理的承诺拒绝最终都会陷入该困境。如果您使用 Ember-CLI,则可以使用初始化程序来实现它。

// app/initializers/on-error.js
export default {
  name: 'on-error',
  initialize: function(container, app) {
    Ember.onerror = function(error) {
      if(error && error.status === 401) {
        // Ember 2.1 adds a public lookup function. Older versions
        // need to use the container.
        var router = app.lookup ? app.lookup('router:main') :
                     app.__container__.lookup('router:main');
        // Even future versions of ember are likely to have an 
        // accessible router service to do this work.
        router.transitionTo('sign-in');
      }

      if(error && error.stack) {
        // Uncaught exception - Log stacktrace to server
      }
    };
  }
}

如上所述,这将处理所有未捕获的承诺拒绝。因此,这仍然为您提供了很好的灵活性,可以在组件中本地处理承诺。例如:

export default Ember.Component.extend({
  actions: {
    saveChanges: function() {
      this.get('model').save().then(null, (reason) => {
        if(/* reason is validation error */) {
          this.set('validationError', reason.errorMsg);
        } else {
          throw reason;
        }
      })
    }
  }
 });

请注意,在上面的承诺拒绝处理程序中,如果我们无法处理错误,我们将重新抛出它。这个非常重要。重新抛出错误将为任何其他链式承诺处理程序提供处理该错误的机会。最终它将达到Ember.onerror如果不处理。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2015 年重新审视 Ember Handling 401 的相关文章

  • 在 Rails 中强制内联渲染 PDF 文档

    我正在编写一个从一组 XML 文件生成 PDF 文件的服务 正在正确生成 PDF 但是 每次我单击 查看 PDF 链接时 浏览器都会要求用户下载 PDF 文件 我需要 PDF 内联显示 就像任何常规 HTML 页面一样 我虽然我写的代码是正
  • Rspec 控制器测试,传递 JSON 参数

    我试图实现以下目标 在 RSpec 控制器测试中创建 POST json 请求 并向其传递参数 这是我的代码 it returns access token do post login email bla password bla1 for
  • Ruby on Rails 从视图路由到控制器中的自定义方法

    我有一个控制器名称帖子 在我的 config routes rb 我用过这个 resources posts app controllers posts controller rb class PostsController lt Appl
  • 如何使用 AngularJS、Devise 和 UI Router 全局实现身份验证?

    我对 Angular 很陌生 所以这可能是一个新手问题 我正在尝试实现一个简单的任务管理器 只是一个练习 以 Rails 作为后端 以 Angular 作为前端 到目前为止 我遵循了教程 一切正常 现在我想在全球范围内实施身份验证 这意味着
  • Rails - 可以在 javascript 函数中设置 Rails 变量吗?

    在 javascript 函数中设置 Rails 变量有什么问题吗 我无法在谷歌上搜索到明确的答案 只是想确保没有我不知道的陷阱或缺陷 我实际上对它是如何工作的感到困惑 如果 javascript 在客户端执行 我不会假设 Rails 会在
  • Rails - 格式日期字段

    如何设置 date field 的日期格式样式 我得到了以下表格 这是为日期字段呈现以下 HTML
  • 记录时何时出现致命错误?

    在 log4j 和 log4net 等日志框架中 您可以记录各种级别的信息 大多数级别都有明显的意图 例如 调试 日志与 错误 日志是什么 然而 我一直害怕的一件事是将我的日志记录归类为 致命 哪种类型的错误如此严重以至于应被归类为致命错误
  • 处理rails应用程序中的rack_throttle异常

    当超出速率限制时 如何处理由rack throttle gem 生成的错误 现在我只收到包含以下内容的回复 Internal Server Error undefined method each for 403 Forbidden Rate
  • pow 说: Bundler::GemNotFound:无法在任何源中找到 rake-0.9.2.2

    我有一个运行良好的 Rails 应用程序rails s 但是当我尝试使用 pow 加载它时 我收到此错误 Bundler GemNotFound Could not find rake 0 9 2 2 in any of the sourc
  • 如果不选择 Updated_at 属性,则无法更新 Rails 4 中的模型

    我正在从 Rails 3 2 13 升级到 4 并遇到更新模型的问题 我正在尝试仅更新模型上的单个属性 其中我只有 id 我还需要验证和回调 这在 Rails 3 中运行良好 但在 Rails 4 中遇到了麻烦 在 Rails 4 中 如果
  • CanCan load_and_authorize_resource 触发禁止属性

    我有一个使用强参数的标准 RESTful 控制器 class UsersController lt ApplicationController respond to html js def index users User all end
  • 将 URL 转换为 JSON 版本?

    在我的应用程序的所有页面上 我想要一个指向当前页面的 JSON 版本的链接 有什么巧妙的技巧可以做到这一点吗 当 URL 中包含额外的 参数时 情况就变得复杂了 所以 url 将被转置为 users gt users json users
  • 在 Rails 中的帖子中添加“喜欢/不喜欢”按钮

    该网站是一个简单的社区 每个用户都会创建帖子 并且用户可能 喜欢 它们或 不喜欢 它们 我有一个 发帖 和 点赞 模型 目前 我通过 post likes size 列出了所有帖子以及每个帖子的点赞大小 喜欢帖子的按钮也可以使用 我不知道该
  • 我可以在 render.js 上执行的视图中使用 CoffeeScript 吗?

    我需要做什么才能在 Rails JS 视图中使用 CoffeeScript 例如 def index format js render layout gt false end 我需要做什么才能让 Rails 使用index js coffe
  • Rails 可以自动解析从表单 text_field 收到的日期时间吗

    Rails 可以自动解析从表单的文本字段接收到的日期时间吗 in view div class field br div in controller params product updated at yesterday 目前我收到以下错误
  • Rails:如何重新启动 sidekiq?

    我正在使用 sidekiq gem 在后台运行 API 调用 我在守护进程中运行 sidekiq 如下所示 bundle exec sidekiq d 现在我对我的方法做了一些更改 所以我想重新启动 sidekiq 我尝试使用以下命令杀死
  • 如何使用 ember.js 进行类似过滤

    我在 ember pre 1 0 中有一个简单的 ArrayController 发现如果过滤器找到给定属性的完全匹配 我可以削减列表 但我似乎找不到的是如何使用过滤器进行 like 查询 如果我搜索包含用户的数组 下面的内容将起作用 fi
  • database.yml 的所有可能键是什么

    我刚刚发现reconnect true配置选项可以在database yml文件 还有哪些其他可能的配置选项 是否有所有选项的完整参考 已知的关键示例 default default adapter mysql2 encoding utf8
  • render_views 在 rspec 中做什么?

    我对 rspec 很陌生 对 Rails 也很陌生 在为控制器编写测试用例时 我注意到render views经常使用 这是做什么的 如果我不调用它会发生什么 它呈现控制器规范中的视图 如果不放置 render views 视图将不会渲染
  • 更改 Rails 中的默认错误消息

    我们的客户决定 他们希望整个应用程序中所有空白 AR 错误消息从 不能为空 更改为 必须完成 Rails 最简单的方法是什么 Use config locales en yml 具体来说 将以下内容放入该文件中 en activerecor

随机推荐