5

我正在玩在 Rails 4 之上编写一个纯 Ember.js 应用程序,我对如何处理用户管理感到困惑。我最初的想法是使用纯服务器渲染模板 (ERB) 通过 Devise 进行用户注册和登录,然后应用程序的其余部分将使用 Ember 框架。

问题在于 Ember 想要接管 <body> 标签并控制整个视口。通过这种方式,我无法选择应用程序的哪些方面应该使用服务器呈现的 Erb 模板,哪些应该存在于 Ember 逻辑中。

我看到了很多关于如何处理已经登录的用户的示例,并且ember-auth看起来很有趣,可以促进身份验证控制器,但我没有看到关于允许完整用户注册体验发生的教程或建议Ember 应用程序。

我是否遗漏了一些东西,无论是从我没有找到正确代码的技术角度还是从我不应该这样做的架构角度?

这适用于 ember-rails(0.12.0 w/1.0.0.rc3.3 ember-source)、Rails 4.0.0.rc1 和 Devise(rails4 分支)。

4

3 回答 3

6

ember-auth在这里开发。

您实际上不需要对用户注册进行任何特殊处理。像对待另一个模型一样对待用户注册,因为创建user模型不需要身份验证。(编辑或删除它应该需要身份验证。)

您的实现可能如下所示:

App.User = DS.Model.extend
  email: DS.attr 'string'
  password: DS.attr 'string'

App.UsersNewRoute = Em.Route.extend
  model: ->
    App.User.createRecord()

App.UsersNewController = Em.ObjectController.extend 
  create: ->
    @store.commit()

为简洁起见,略过错误检查、模板代码等。

于 2013-05-08T05:39:41.677 回答
1

这是为了参考基于@heartsentwined 的回答所做的工作,因为在评论中粘贴效果不是很好。有关更多信息,请参阅评论。由于我的 api 返回用户 json,因此我只传递了它所期望的格式。

didCreate: function() {
  var user = App.Auth.get('_response').response.user;
  var auth = {auth_token: user.auth_token, id: user.id};
  App.Auth.get('_response').canonicalize(auth);
  App.Auth.trigger('signInSuccess');
}

更新:我切换到 ember-model,现在在我调用的同一个地方执行此操作(SignupControllermodel.save()的操作)。submit

var model = this.get('model'); 
model.on('didCreateRecord', function() { 
  var user = this.data;
  var auth = {auth_token: user.auth_token, user_id: user.id, remember_token: user.remember_token};
  App.Auth.get('_response').canonicalize(auth);
  App.Auth.trigger('signInSuccess');
}); 

model.save();
于 2013-06-06T03:53:16.357 回答
1

上面的解决方案几乎不适合我。这是起作用的:

didCreate: function() {
  var user = App.Auth.get('_response').response.user;
  App.Auth.signIn({
    data: {
      'email':    user.email,
      'password': this.get('password'),
      'remember': true
    }
  });
}

App.Auth.signIn 在文档中明确使用:http ://ember-auth.herokuapp.com/docs

于 2013-07-17T17:29:19.517 回答