Ruby on rails 使用Rails和Desive进行基于Ember.js会话cookie的身份验证

Ruby on rails 使用Rails和Desive进行基于Ember.js会话cookie的身份验证,ruby-on-rails,ember.js,devise,Ruby On Rails,Ember.js,Devise,我希望通过使用rails、Desive和基于cookie的会话来实现我的Ember.js应用程序认证的3个目标 如果未登录,则重定向到#/sessions/new 始终在应用程序模板中显示当前用户的信息 如果用户已登录并直接转到#/some/route。当前用户应在加载时加载 我看了这些embercast视频:&。它们有点过时,但很有用 但仍不能完全解决。有人有完整的Rails 4、Desive、Emberjs 1.0.0示例吗 最大的问题是在页面加载时加载当前用户,并在提交登录表单时设置当前用

我希望通过使用rails、Desive和基于cookie的会话来实现我的Ember.js应用程序认证的3个目标

  • 如果未登录,则重定向到
    #/sessions/new
  • 始终在应用程序模板中显示当前用户的信息
  • 如果用户已登录并直接转到
    #/some/route
    。当前用户应在加载时加载
  • 我看了这些embercast视频:&。它们有点过时,但很有用

    但仍不能完全解决。有人有完整的Rails 4、Desive、Emberjs 1.0.0示例吗

    最大的问题是在页面加载时加载当前用户,并在提交登录表单时设置当前用户

    现在这是我的策略:

    
    App.User = Em.Object.extend();
    
    App.User.reopenClass({
      current: function() {
        return Ember.$.getJSON("/users/current").then(function(data) {
          return data
        })
      }
    });
    
    App.ApplicationRoute = Ember.Route.extend({
      model: function() {
        return App.User.current();
      }
    });
    
    App.SessionsNewController = Ember.ObjectController.extend({
    
      actions: {
        save: function(data) {
          var self = this, data = this.getProperties('email', 'password');
    
          $.post("/sessions", { session: data }).always(function(response, status, data) {
            if (status == "success") {
              self.transitionToRoute('index');
            } else {
              self.set('errorMessage', data);
            }
          })
    
        },
      }
    
    });
    
    

    我不会说这是不可行的。但是,为了使身份验证正常工作,您将做大量额外和不必要的工作,这一切都可以通过简单的页面重定向来完成

    我从德里克那里收集了一些意见,他是《木偶主干》的作者。虽然这些都是用于主干网而不是Ember.js,但客户端身份验证的情况是相同的

    我发现让主干网/木偶网处理授权站点的身份验证和重新加载是痛苦的,也没有必要的。一旦他们登录,将他们重定向到服务器处理的不同URL,并让服务器作为经过身份验证的用户发送他们需要的所有内容

    德里克的另一句话:

    对。在很多情况下,我也会直截了当地说,“不要做单页应用程序”。登录屏幕就是最大的例子。在过去几年中我遇到的所有客户中,他们都问我,“嘿,我遇到了这个问题。我试图让我的登录屏幕从服务器返回当前用户信息,并在屏幕上重做所有这些内容,而不刷新所有内容。”我每次的回答都是,“不要这样做。”。"

    再想想其他情况,比如Gmail。点击Gmail登录页面上的“登录”按钮后,你将无法顺利过渡。还会有相当大的数据加载重定向:)

    从用户的角度来看,他们不会仅仅因为登录后有重定向就说Gmail不好。毕竟,注册/注册的频率远低于日常邮件操作

    所以我的建议是,在用户会话更改后重新加载所有资源。让Rails和Desive以传统方式完成这些肮脏的工作