Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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
cakephp 3+;Jwt+;角度-401(未经授权)_Php_Angularjs_Cakephp_Cakephp 3.0 - Fatal编程技术网

cakephp 3+;Jwt+;角度-401(未经授权)

cakephp 3+;Jwt+;角度-401(未经授权),php,angularjs,cakephp,cakephp-3.0,Php,Angularjs,Cakephp,Cakephp 3.0,嗯,我需要发送用户名和密码来生成登录令牌,问题总是我从客户端(角度)发送的响应有错误,但当我从邮递员发送时,效果很好 在cakephp3中 public function initialize() { parent::initialize(); $this->Auth->allow(['add', 'token', 'me']); } public function token() { $user = $this->Auth->iden

嗯,我需要发送用户名和密码来生成登录令牌,问题总是我从客户端(角度)发送的响应有错误,但当我从邮递员发送时,效果很好

在cakephp3中

public function initialize()
{
    parent::initialize();
    $this->Auth->allow(['add', 'token', 'me']);
}
public function token()
{
        $user = $this->Auth->identify();
        if (!$user)
        {
            throw new UnauthorizedException('Invalid username or password');
        }
        $this->set([
            'success' => true,
            'data' => [
                'user_id' => $user['id'],
                'token' => JWT::encode([
                    'sub' => $user['id'],
                    'exp' =>  time() + 604800
                ],
                    Security::salt())
            ],
            '_serialize' => ['success', 'data']
        ]);
    }
我是怎么发送的

$scope.doLogin = function()
        {
            dataLogin = {
                username: vm.username,
                password: vm.password
            };
            console.log(dataLogin);
            // call the Auth.login() function
            //$scope.processing = true;
            $scope.error = '';

            Auth.login(dataLogin)
                .then(function(data) {
                    if (data.success)
                        $state('home');
                    else
                        console.log(data);
                        $scope.error = data.message;
                });
        };

应用程序服务

(function(){
    angular
        .module('appDekma')
        .factory('apiService', apiService);

    apiService.$inject = ['$http'];
    function apiService($http) {
        return {
            request: sendRequest
        };

        function sendRequest(method, endpoint, data) {
            var API_HOST = 'http://localhost/dekma_backend';

            var req = {
                method: method || 'GET',
                url: API_HOST + endpoint,
                data: data || '',
                headers: {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json',
                    'Access-Control-Allow-Origin' : '*',
                    'Access-Control-Allow-Headers': 'Accept, Authorization, Cache-Control, Content-Type, X-Requested-With, x-csrf-token',
                    'Access-Control-Max-Age': '3600'
                }
            };
            return $http(req)
                .then(successCallback, errorCallback);

            function successCallback(response)
            {
                return response.data;
            }
            function errorCallback(error) {
                var message = 'Something terrible happened!';
                if (error.data && error.data.code)
                {
                    switch (error.data.code)
                    {
                        case 500:
                            break;
                        case 401:
                            break;
                        case 403:
                            break;
                        case 404:
                            message = 'Could not find content';
                            break;
                        default:
                            break;
                    }
                }
                return error.data;
            }
        }
    }
})();
angular.module('app').config(['$routeProvider','$httpProvider',函数($routeProvider,$httpProvider,URL){
$httpProvider.interceptors.push(['$q','$location','$localStorage',函数($q,$location,$localStorage){
返回{
“请求”:函数(配置){
config.headers=config.headers | |{};
if($localStorage.token){
config.headers.Authorization='Bearer'+$localStorage.token;//本地存储中存储的JWT令牌
config.headers.Accept='application/json';
}
返回配置;
},
“responseError”:函数(响应){
控制台日志(响应);
如果(response.status==401 | | response.status==403 | | response.status==500){
var login_url=url.BASE+'users/login';
}
返回$q.reject(响应);
}
};
}]);
$routeProvider
。当(“/”{
templateUrl:“public/html/”+“your_html_page.html”,
控制器:“您的\u anuglar\u控制器”
})
。否则({重定向到:'/'});
}]);

如果您进入chrome的网络选项卡并检查请求头,是否一切正常?它和你的邮递员请求肯定有点不同。我对你的AngularJS代码有点困惑,看起来你在把用户名和密码传递给你工厂的登录方法,但是你们的工厂接受一个参数。是的,我有所有的标题更正是的,这是我用$scope做的一个测试,我试图发送不同的变量或以不同的方式发送way@BenBeck我修复了它,问题出在CakePHP3中,我使用了一个CakePHP3JWT插件,不同的是禁用和启用正确的插件,它工作正常。
(function(){
    angular
        .module('appDekma')
        .factory('apiService', apiService);

    apiService.$inject = ['$http'];
    function apiService($http) {
        return {
            request: sendRequest
        };

        function sendRequest(method, endpoint, data) {
            var API_HOST = 'http://localhost/dekma_backend';

            var req = {
                method: method || 'GET',
                url: API_HOST + endpoint,
                data: data || '',
                headers: {
                    'Accept': 'application/json',
                    'Content-Type': 'application/json',
                    'Access-Control-Allow-Origin' : '*',
                    'Access-Control-Allow-Headers': 'Accept, Authorization, Cache-Control, Content-Type, X-Requested-With, x-csrf-token',
                    'Access-Control-Max-Age': '3600'
                }
            };
            return $http(req)
                .then(successCallback, errorCallback);

            function successCallback(response)
            {
                return response.data;
            }
            function errorCallback(error) {
                var message = 'Something terrible happened!';
                if (error.data && error.data.code)
                {
                    switch (error.data.code)
                    {
                        case 500:
                            break;
                        case 401:
                            break;
                        case 403:
                            break;
                        case 404:
                            message = 'Could not find content';
                            break;
                        default:
                            break;
                    }
                }
                return error.data;
            }
        }
    }
})();