Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 针对Laravel后端的角度身份验证_Javascript_Php_Angularjs_Authentication_Laravel - Fatal编程技术网

Javascript 针对Laravel后端的角度身份验证

Javascript 针对Laravel后端的角度身份验证,javascript,php,angularjs,authentication,laravel,Javascript,Php,Angularjs,Authentication,Laravel,我正在使用Laravel创建一个应用程序,并构建一个小型的内部API,通过一个有角度的前端连接 我让auth工作,但希望确保这是一种可以接受的登录用户的方式,并确保一切都是安全的 会话控制器: public function index() { return Response::json(Auth::check()); } public function create() { if (Auth::check()) { return Redirect::to('

我正在使用Laravel创建一个应用程序,并构建一个小型的内部API,通过一个有角度的前端连接

我让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!'));
}
拉维尔路线:

Route::get('auth/status', 'SessionsController@index');
角度工厂:

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,以免被任何人查看/点击,我想知道如何做到这一点。这是一个一般性的问题,但任何见解都将不胜感激。谢谢。

好问题。我以前回答过同样的问题,所以我会说同样的话

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

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

您可以使用Laravel的路由过滤器保护您的路由不受未经授权的用户的攻击。但是,由于您的Laravel应用程序现在已成为一个仅限端点的应用程序,前端框架将承担起身份验证和授权方面的繁重任务

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

我上面所说的意思是,例如:

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

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

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

解决这个问题的一个方法是角色/组/权限,您可以随意调用它们。在Angular应用程序中设置用户对应用程序的权限,并可能将该数据存储在颁发的令牌中

阅读这篇关于如何正确使用前端JavaScript框架进行身份验证/授权的优秀文章(AngularJS)


文章:

我看过这篇文章,只是乍一看并没有意识到它是多么有用,写得多么好。非常感谢,诺亚。没问题,很高兴我能帮上忙。还有一个后续问题。我知道这一切是如何工作的,但如何在浏览器选项卡或新窗口/更高版本的访问之间保持登录状态?我可以检查一下“会话”服务中是否存在laravel的cookie。一切都开始点击。。。感谢您将身份验证令牌存储在本地存储中。@cpk cookies应用作备用。