我正在使用Laravel创建一个应用程序,并构建一个小型内部API来连接Angular前端。
我有身份验证功能,但我想确保这是一种可以接受的登录用户的方式,并确保一切都是安全的。
会话控制器:
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', 'SessionsController@index');
Angular Factory:
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,以防任何人查看/点击,我也想知道如何做到这一点。这是一个一般性的问题,但任何见解都将不胜感激。谢谢
好问题。我以前也回答过同样的问题,所以我会说同样的话。
身份验证在SPAs中有点不同,因为你几乎完全分离了你的Laravel应用程序和Angular。Laravel负责验证、逻辑、数据等。
我强烈建议你阅读底部链接的文章。
您可以使用Laravel的路由过滤器来保护您的路由免受未经授权的用户的攻击。然而,由于您的Laravel应用程序现在仅成为端点,前端框架将承担身份验证和授权的重任。
一旦你设置了路由过滤器,这不会阻止授权用户尝试执行他们无权执行的操作
我所说的上面的意思是例如:
您有一个API端点:/API/v1/users/159/edit
端点是RESTful 7中的一个,可以用于编辑用户。任何软件工程师或开发人员都知道这是一个RESTful端点,如果您的应用程序授权,可以向该端点发送带有数据的请求。
您只希望用户159或管理员能够执行此操作。
解决这个问题的方法是角色/组/权限,不管你想怎么称呼它们。在Angular应用程序中设置用户对应用程序的权限,并可能将数据存储在已颁发的令牌中。
阅读这篇关于如何使用前端JavaScript框架正确进行身份验证/授权的文章(AngularJS)。
文章:https://medium.com/opinionated-angularjs/techniques-for-authentication-in-angularjs-applications-7bbf0346acec