![](/img/trans.png)
[英]Ember.js / Rails / Devise - Handling Validation Errors from Server
[英]Handling user registration in an Ember.js/Rails/Devise app
我正在玩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分支)。
ember-auth
dev在這里。
您實際上並不需要對用戶注冊進行任何特殊處理。 像對待其他模型一樣對待用戶注冊,因為創建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()
為簡潔起見,跳過錯誤檢查,模板代碼等。
這是為了參考基於@ 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,現在在我調用model.save()
( model.save()
的submit
動作model.save()
的同一個地方執行此操作。
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();
上面的解決方案幾乎沒有,但對我來說並不是很有用。 這是做了什么工作:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.