2014-10-08 97 views
5

我正在使用Laravel創建一個應用程序,並構建一個小的內部API以連接到Angular前端。對Laravel後端的角度驗證

我有auth工作,但要確保這是登錄用戶的可接受的方式,並確保一切安全。

會話控制器:

public function index() { 
    return Response::json(Auth::check()); 
} 


public function create() { 
    if (Auth::check()) { 
     return Redirect::to('/admin'); 
    } 
    return Redirect::to('/'); 
} 

public function login() { 

    if (Auth::attempt(array('email' => Input::json('email'), 'password' => Input::json('password')))) { 
     return Response::json(Auth::user()); 
     // return Redirect::to('/admin'); 
    } else { 
     return Response::json(array('flash' => 'Invalid username or password'), 500); 
    }  
} 

public function logout() { 
    Auth::logout(); 
    return Response::json(array('flash' => 'Logged Out!')); 
} 

Laravel路線:

Route::get('auth/status', '[email protected]'); 

角廠:

app.factory('Auth', [ "$http", function($http){ 


var Auth = {}; 

Auth.getAuthStatus = function() { 
    $http({ 
     method: "GET", 
     url: "/auth/status", 
     headers: {"Content-Type": "application/json"} 
    }).success(function(data) { 
     if(!data) { 
     console.log('Unable to verify auth session'); 
     } else if (data) { 
      console.log('successfully getting auth status'); 
      console.log(data);    

      // return $scope.categories; 
      Auth.status = data; 
      return Auth.status; 
     } 
    }); 

} 

return Auth; 

} 

]); 

我會那麼基本上包裹的東西整個應用程序就像一個 「AppController的」 和將「Auth」工廠聲明爲依賴項。然後,我可以調用Auth.getAuthStatus()並根據用戶狀態隱藏/顯示事物,因爲這基本上是SPA。

我知道我還需要隱藏/ auth/status URI被任何人查看/命中,並且想知道如何做到這一點。一種普遍的問題,但任何洞察力將不勝感激。謝謝。

回答

9

偉大的問題。我之前回答過同樣的問題,所以我會說同樣的事情。

認證在SPA中有點不同,因爲您幾乎完全將您的Laravel應用程序和Angular分開。 Laravel負責驗證,邏輯,數據等。

我強烈建議您閱讀鏈接在底部的文章。

您可以使用Laravel的路由過濾器來保護您的路由免受未經授權的用戶的侵害。但是,由於您的Laravel應用程序現在只是端點,因此前端框架將在身份驗證和授權方面進行繁重的工作。

一旦設置了路由過濾器,這並不妨礙授權用戶嘗試執行他們未被授權執行的操作。

我的意思上面是什麼,例如:

你有一個API端點:/ API/V1 /用戶/ 159 /編輯

端點是RESTful的7之一,並且可以用於編輯用戶。任何軟件工程師或開發人員都知道這是一個RESTful端點,並且如果您的應用程序授權,可以向該端點發送帶有數據的請求。

您只希望用戶159能夠執行此操作或管理員。

對此的解決方案是角色/組/權限,無論您想調用它們。在您的Angular應用程序中爲您的應用程序設置用戶的權限,並可能將這些數據存儲在已發佈的令牌中。

閱讀這篇關於如何使用前端JavaScript框架進行正確認證/授權的偉大文章(在AngularJS中)。

文章:https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec

+0

我已經看到了這篇文章,只是沒有乍一看頗有如何實現有益的,寫得很好很。謝謝一堆諾亞。 – cpk 2014-10-09 17:02:56

+1

沒問題,很高興我能幫到你。 – 2014-10-09 17:30:09

+0

還有一個跟進問題。我知道這是如何工作的,但是我怎樣才能在瀏覽器標籤頁或新窗口/稍後訪問之間保持登錄狀態? 我會在「Session」服務中檢查laravel的cookie是否存在?它的所有開始點擊...再次感謝 – cpk 2014-10-09 18:47:15