2015-05-20 49 views
11

我使用Ionic在Codeigniter/Ion_Auth/codeigniter-restclient之上構建登錄系統,當我嘗試從「離子服務器」登錄時,登錄工作,但對logged_in()方法的下一個API請求返回false。爲什麼當使用「離子發球」窗口登錄時登錄會話「粘住」,但當我將瀏覽器指向www文件夾時工作正常?

同樣的事情正常工作時,我的瀏覽器指向到www文件夾。

所以現在的問題是一步一步:

  1. 運行離子服務

  2. 你看到的登錄表單(http://localhost:8100/#/app/login

  3. 輸入電子郵件,並通過

  4. 剩下的api返回「登錄成功」

  5. $ state.go( 'app.profile')的作品,並重定向到http://localhost:8100/#/app/profile

  6. REST API獲取/ LOGGED_IN返回false,我重定向到登錄頁面

如果我做同樣的在常規瀏覽器中,步驟1變爲:打開瀏覽器並轉到http://localhost:8888/App/www/#/app/login,在步驟6 REST獲取api/logged_in返回true,我不會重定向到登錄頁面,我會保留在配置文件頁面上。

的代碼是相同的。所以我的猜測是,也許ion_auth沒有得到它想要的cookie或會話被重置。我不確定這個問題是什麼。這是我第一次離子/應用程序的項目,所以我可能會丟失一些事情的正確方法使用,在瀏覽器上運行的代碼通過移動應用來驗證

謝謝

UPDATE: 看來使用時「離子服務器「窗口的每個請求觸發一個新的會話。新會話存儲在數據庫中,ion_auth會針對最後一個測試logged_in,它不包含登錄詳細信息。

+0

問題清楚了嗎?對我來說沒有。我多次嘗試瞭解它,但確實如此,這是不明確的。請說明你有什麼,你測試了什麼,以及你的問題。 – aorfevre

+0

我添加了一步一步的解釋,希望它有助於 – orbitory

+0

解釋是更好的那樣。 – aorfevre

回答

2

你取約REST API和cookie和session。 Cookie和會話不符合REST理念。 Here is why.

讓我告訴你我們是如何在我們的項目中完成這個問題的。知道哪個用戶正在請求以及它是否具有訪問權限的基本方法是通過「授權」標頭值。您可以使用基本身份驗證,Barer或任何其他。

我們一般喜歡基於令牌的授權系統。當登錄成功時,服務器發送令牌。在離子應用程序中,我們使用名爲SessionServicefactory進行保存。所以無論何時用戶登錄,令牌都會被存儲並用於每個請求。但是如果用戶關閉應用程序,令牌將會丟失。所以我們可以將它存儲在本地存儲中。用戶可以直接重定向到儀表板,直到用戶註銷。

app.factory("SessionService", function($window){ 
    var user={}; 

    if ($window.localStorage['user']!=undefined){ 
     user=JSON.parse($window.localStorage['user']); 
     console.log(user); 
    } 

    return{ 
     isLoggedIn:function(){ 
      return !isEmpty(user); 
     }, 
     logout:function(){ 
      console.log("logout") 
      user={}; 
      $window.localStorage.clear(); 
     }, 
     setUser:function(data){ 
      user=data; 
      $window.localStorage['user']= JSON.stringify(user); 
     }, 
     getUser:function(){ 
      return user; 
     } 
    } 
}) 

現在在每一個Web請求,你可以設定值Authorization頭時調用SessionService.getUser().token

UPDATE:

儘管使用的cookies不建議,你可以在你的應用程序中使用它輕鬆。

如果您使用CORS發送請求,則angular不會向請求發送cookie。 一個這個問題是發送withCredentials: true每個請求的方式地址:

$http({withCredentials: true, ...}).get(...) 

進一步閱讀關於這個here

希望這會有所幫助!

+0

雖然我同意cookies不是使用API​​的最佳方式(並且此時我會可能嘗試使用本地存儲解決方案)並不意味着它們作爲功能被刪除。還是他們?根據我的理解,即使不推薦,cookie也應該可以工作。 – orbitory

+0

我記得試過,會再試一次,謝謝 – orbitory

相關問題