cakephp 3+;Jwt+;角度-401(未经授权)
嗯,我需要发送用户名和密码来生成登录令牌,问题总是我从客户端(角度)发送的响应有错误,但当我从邮递员发送时,效果很好 在cakephp3中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
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;
}
}
}
})();