针对Laravel后端的Angular Auth


Angular Auth against Laravel backend

我正在使用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