簡體   English   中英

在Ember.js / Rails / Devise應用程序中處理用戶注冊

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM