Angular Auth反对Laravel后端

cpk*_*cpk 5 javascript php authentication laravel angularjs

我正在使用Laravel创建一个应用程序并构建一个小的内部API来连接到Angular前端.

我有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!'));
}
Run Code Online (Sandbox Code Playgroud)

Laravel路线:

Route::get('auth/status', 'SessionsController@index');
Run Code Online (Sandbox Code Playgroud)

角厂:

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;

}

]);
Run Code Online (Sandbox Code Playgroud)

然后我会将整个应用程序包装成类似"appController"的东西,并将'Auth'工厂声明为依赖项.然后我可以调用Auth.getAuthStatus()并根据用户状态隐藏/显示内容,因为这基本上是SPA.

我意识到我还需要隐藏/ auth/status URI不被任何人查看/命中,并且想知道如何做到这一点.这是一个普遍的问题,但任何见解将不胜感激.谢谢.

小智 9

好问题.我之前已经回答了同样的问题,所以我会说同样的话.

在SPA中进行身份验证有点不同,因为您几乎完全分离了Laravel应用程序和Angular.Laravel负责验证,逻辑,数据等.

我强烈建议你阅读底部链接的文章.

您可以使用Laravel的路由过滤器来保护您的路由免受未经授权的用户的攻击.但是,由于您的Laravel应用程序现在只是一个端点,因此前端框架将在认证和授权方面做得非常繁重.

设置路由过滤器后,这不会阻止授权用户尝试执行他们无权执行的操作.

我的意思是上面的例子:

您有一个API端点:/ api/v1/users/159/edit

端点是RESTful 7之一,可用于编辑用户.任何软件工程师或开发人员都知道这是一个RESTful端点,如果您的应用程序授权,可以向该端点发送包含数据的请求.

您只希望用户159能够执行此操作或管理员.

无论您想要调用它们,解决方案都是角色/组/权限.在Angular应用程序中设置应用程序的用户权限,并可能将该数据存储在已颁发的令牌中.

阅读这篇伟大的文章(在AngularJS中),了解如何使用前端JavaScript框架正确地进行身份验证/授权.

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

  • 将身份验证令牌存储在本地存储中. (3认同)