2014-10-08 96 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