如何在角度ui中创建csrf标记

时间:2016-11-28 10:19:43

标签: angularjs laravel

我使用角度ui作为单独的包,对于后端我使用laravel后端。现在如果我绕过laravel中的csrf令牌我可以处理来自单独的角度包的post请求但是为了安全性我将不得不使用csrf在发布请求。我没有使用中间件。任何人都可以在这方面帮助我吗?

2 个答案:

答案 0 :(得分:0)

根据我的知识:Tern off laravel默认令牌行为,通过评论中间件行(正如您已经做过的那样)。

不要害怕这一点,因为您可以使用jwt-auth将令牌与请求一起传递给使用jwt-auth附带的中间件来保护您的请求/ API。您可以从here获取更多详细信息。

答案 1 :(得分:-1)

您可以在Laravel中创建一个返回CSRF令牌的API,例如:

Route::get('api/token', function() {
    return Session::token();
});

当然,您需要在控制器或中间件等上添加验证。例如在控制器中:

public function list() {
    if (Session::token() != $request->header('X-Csrf-Token') )
        return Response::json('CSRF does not match', 400);
    // Other code
}

在您的angularjs代码中,您可以获取令牌并将其注册为常量,并且可以将所有angularjs HTTPRequest注入到api中:

var xhRequest = new XMLHttpRequest();
xhRequest.open("GET", "api.yourdomain.com/api/token", false);
xhRequest.send(null);

app.constant("CSRF_TOKEN", xhRequest.responseText);

app.run(['$http', 'CSRF_TOKEN', function($http, CSRF_TOKEN) {    
    $http.defaults.headers.common['X-Csrf-Token'] = CSRF_TOKEN;
}]);