2013-02-01 176 views
48

有沒有人有經驗在pre4中使用新路由器創建身份驗證機制?Ember認證最佳實踐?

下面是我的一些想法至今:

  • 爲了從我要使用令牌認證服務器(Rails應用程序)的視圖(恩伯APP)完全分離。我可能會在Rails服務器上使用Devise。
  • 我需要類似於Ember應用程序中的before_filter等價物,我可以檢查是否存在當前用戶以及該用戶是否具有身份驗證令牌集。
  • Rails服務器將在每次調用時返回當前的認證令牌。如果它返回一個空認證令牌,Ember應用程序應該檢測到這個並轉換到未認證狀態,重定向到登錄視圖。

我懷疑我應該使用一個Ember狀態機,但我不確定如何繼續。任何人都解決了這個問題呢?

回答

51

更新:像@DustMason在他的回答中說,檢查真棒embercasts認證最佳做法。

爲了從服務器(Rails應用程序)的視圖(灰燼應用程序)我想使用令牌認證完全分離。我可能會在Rails服務器上使用Devise。

有道理。

我需要類似於Ember應用程序中的before_filter等價物,我可以檢查是否存在當前用戶以及該用戶是否具有身份驗證令牌集。

您可以在路由上添加enter掛鉤,這大致相當於before_filter。但不知道這是檢查auth令牌的最佳位置。

Rails服務器將在每次調用時返回當前的認證令牌。

有道理。我們使用cookie-auth並通過調用/api/me來獲取當前用戶配置文件,但兩者都應該有效。

如果它返回一個空驗證令牌,Ember應用程序應該檢測到並轉換到未驗證狀態,重定向到登錄視圖。

關於這種方法的事情是(與rails不同),「保護」訪問特定的燼路由並不容易。無論用戶什麼時候可以彈出JS控制檯並輸入他們想要的任何狀態。因此,而不是想着「用戶只能進入這個狀態,如果認證」考慮「假設未認證用戶以某種方式瀏覽到這條路線」

我懷疑我應該使用灰燼狀態機這一點,但我不確定如何繼續。任何人都解決了這個問題呢?

我們的認證需求非常簡單,所以我們沒有找到需要狀態機。相反,我們在ApplicationController上有一個isAuthenticated屬性。當用戶未通過身份驗證時,我們使用application.hbs中的此屬性將主視圖替換爲登錄表單。

{{if isAuthenticated}} 
    {{render "topnav"}} 
    {{outlet}} 
{{else}} 
    {{render "login"}} 
{{/if}} 

從ApplicationRoute,我們獲取用戶的個人資料:

App.ApplicationRoute = Ember.Route.extend({ 
    model: function() { 
    var profiles; 
    profiles = App.Profile.find({ alias: 'me' }); 
    profiles.on("didLoad", function() { 
     return profiles.resolve(profiles.get("firstObject")); 
    }); 
    return profiles; 
    } 
}); 

那麼,我們的ApplicationController計算它是基於被返回的輪廓isAuthenticated財產。

+2

我標記爲接受,因爲這讓我走上了正軌。你能否詳細說明你所做的評論:「有道理,我們使用cookie-auth並通過調用/ api/me獲取當前用戶配置文件,但兩者都應該工作。」什麼是cookie-auth?登錄後,您仍使用令牌認證並將令牌存儲在cookie中嗎? –

+0

當然 - 猜測「cookie-auth」並不是真的。我的意思是我們正在使用rails cookie-store進行會話。我們的API期望用戶擁有一個有效的會話,並在請求/ api/me時返回current_user。 –

+1

快速提示,但您提到的「'enter'」鉤現在已被棄用,取而代之的是「activate」(和相應的「deactivate'」) –

19

我建議使用ember-auth。它實現了所有需要的功能,並且在我看來工作得很好。

另外還有一個demo and tutorial Devise on Rails由同一個作者。

我也已經實現了基於Ember公司-auth的與設計令牌認證和榜樣的Oauth谷歌和LinkedIn,可以發現here,是住在這裏一個基本的灰燼應用:https://starter-app.herokuapp.com

+1

你的例子真的很好,謝謝。 –

3

何塞普的example app是非常好的。我製作了他的回購副本,以展示如何使用ActiveRecord而不是mongoid來執行此操作,並啓用設計可確認模塊。你可以找到它here。這個回購是從頭開始重建的,而不是分手,因爲我想強迫自己通過所有步驟來實現它。我會更新這個答案,如果我添加一個必要的變化,使其工作的分叉。

+0

很好,謝謝Josep。我會在本週的某個時間完成這項工作。 – jhosteny

+0

非常感謝您對ActiveRecord支持的非常有用的貢獻。 – joscas

4

新發布的Ember異步路由器使我認爲設置一個很好的認證流程更簡單!查看http://www.embercasts.com/的兩部分系列,舉一個例子

+0

回覆上面的評論後,Lol剛剛看到了這個。很好的回答... –

12

我最近從一個定製的認證系統改爲使用ember-simple-auth,發現它很容易與我的應用程序集成。它滿足所有OP的要求,並且還支持刷新令牌。

他們有一個非常好的API和一套很好的例子。任何對基於令牌的身份驗證感興趣的人都應該檢查它。