我使用ngResource在Amazon Web Services上调用REST API时收到此错误:
XMLHttpRequest无法加载 http://server.apiurl.com:8000/s/login?login=facebook.对预检请求的响应未通过访问控制检查:请求的资源上不存在"Access-Control-Allow-Origin"标头.原产地" :HTTP //本地主机,因此"是不允许访问. 错误405
服务:
socialMarkt.factory('loginService', ['$resource', function($resource){
var apiAddress = "http://server.apiurl.com:8000/s/login/";
return $resource(apiAddress, { login:"facebook", access_token: "@access_token" ,facebook_id: "@facebook_id" }, {
getUser: {method:'POST'}
});
}]);
Run Code Online (Sandbox Code Playgroud)
控制器:
[...]
loginService.getUser(JSON.stringify(fbObj)),
function(data){
console.log(data);
},
function(result) {
console.error('Error', result.status);
}
[...]
Run Code Online (Sandbox Code Playgroud)
我正在使用Chrome,我不知道还有什么可以解决这个问题.我甚至将服务器配置为接受来自源的头文件localhost.
从localhost机器向远程django api发出POST请求时,我收到CSRF令牌丢失或错误.
我在AngularJS上的设置:
.config(['$httpProvider', function($httpProvider){
$httpProvider.defaults.xsrfCookieName = 'csrftoken';
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
}]);
Run Code Online (Sandbox Code Playgroud)
但我仍然得到CSRF令牌丢失或不正确的错误.
我检查发送的标题是什么,显然有角度没有发送HTTP_X_CSRFTOKEN.
但我可以看到cookie csrftoken =发送的东西.
有谁知道发生了什么?
请求标题
POST /s/login/ HTTP/1.1
Host: server.somewhere.io:8000
Connection: keep-alive
Content-Length: 290
Pragma: no-cache
Cache-Control: no-cache
Accept: application/json, text/plain, */*
Origin: http://localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://localhost/thesocialmarkt/
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en;q=0.8,en-US;q=0.6,pt-BR;q=0.4,pt;q=0.2
Cookie: csrftoken=hiYq1bCNux1mTeQuI4eNgi97qir8pivi; sessionid=1nn1phjab5yd71yfu5k8ghdch2ho6exc
Run Code Online (Sandbox Code Playgroud) 我在默认情况下在运行 php 5.3 的服务器下安装 laravel 时遇到问题,但我可以选择一个 php 版本在任何特定目录下运行。
guzzlehttp/guzzle 4.1.2 requires php >=5.4.0 -> your PHP version does not satisfy that requirement.
Run Code Online (Sandbox Code Playgroud)
所以我选择 php 5.4 在我试图安装 laravel 的目录上运行,但作曲家不知道我在那个目录中运行 PHP 5.4。
如何解决这个问题?
尝试将未经身份验证的用户重定向到登录屏幕。
我在用着ui.router 和指令来检查登录的用户。但它没有按我的预期工作。它在页面加载之前没有检查,并且我因连续重定向而卡在该页面上。
路由配置:
//User profile
.state('UserProfile', {
url: "/u/:id",
data: {
restrict: true,
name: "Your Profile",
header: true,
footer: false,
css: true,
transparentHeader: true
},
templateUrl: "app/partials/user/userProfile.html",
controller: "userProfileController"
})
//Login page for not authenticated users
.state('LoginPage', {
url: "/login/",
data: {
restrict: false,
name: "Login",
header: false,
footer: false,
css: false,
transparentHeader: false
},
templateUrl: "app/partials/common/loginPage.html",
controller: "loginController"
})
Run Code Online (Sandbox Code Playgroud)
服务:
.factory('userService', ['$cookies', function($cookies){
var userData = {
isLogged: false,
userId: "",
firstName: "",
profilePic: ""
}; …Run Code Online (Sandbox Code Playgroud) angularjs ×2
ajax ×1
api ×1
composer-php ×1
cors ×1
csrf ×1
django ×1
django-csrf ×1
http ×1
javascript ×1
laravel ×1
php ×1
redirect ×1