Rails APIを使用するAngularJSを使用してPhonegap/Cordovaアプリケーションを作成しています。私は$http
を使用してログインイベント中にAPIをヒットしようとしています。 Chromeでアプリケーションをエミュレートする場合(cordova run
を使用して起動する)、$ httpは期待どおりに動作します。
実際のPhoneGapデベロッパーアプリケーションで$http
を使用すると、エラーが発生し、決してAPIにヒットしません。 Rails APIはCORSを許可するためにgem rack-cors
を使用しています。これは他のいくつかのAngularJSアプリケーションで動作し、デバッグ目的でのみ比較的安全ではありません。私が試した何
# config/application.rb
CORS_ALLOW_ORIGIN = "*"
CORS_ALLOW_METHODS = %w{GET POST PUT OPTIONS DELETE}.join(',')
CORS_ALLOW_HEADERS = %w{Content-Type Accept X-Auth-Token AllowedHeader}.join(',')
... other config stuff ...
config.middleware.insert_before 0, Rack::Cors do
allow do
origins '*'
resource '*', :headers => :any, :methods => :any
end
end
config.action_dispatch.default_headers = {
"Access-Control-Allow-Origin" => CORS_ALLOW_ORIGIN,
"Access-Control-Allow-Methods" => CORS_ALLOW_METHODS,
"Access-Control-Allow-Headers" => CORS_ALLOW_HEADERS
}
: 1)更新のPhoneGap3210をする危険な状態で何もアクセスが
<access origin='*'
allows-arbitrary-loads-in-media='true'
allows-arbitrary-loads-in-web-content='true'
allows-local-networking='true' />
<allow-intent href="*" />
<allow-navigation href="*" />
2)すべてのリクエストのヘッダを追加するために、角.run
使用許可は
angular.module("services")
.run(function($http) {
$http.defaults.headers.common['AllowedHeader'] = "origin";
})
を作りました3)手動で他のヘッダーで各リクエストを作成する
login: function(credentials) {
var request = {
url: baseURI + "/user_sessions/",
method: "POST",
params: {
user_session: credentials,
},
headers: {
"Cache-Control": "no-cache",
"Content-Type": "application/json"
}
}
return $http(request);
}
4)はそこcordova-whitelist-plugin
任意の考えを使うのか? $http
がブラウザで動作しているが、電話で失敗していることを参照する多くの質問があります。
この問題は、アプリの開発モードでのみ直面していますか?あなたは簡単にプロキシを設定でき、それが問題を解決することを覚えておいてください。 –
プロキシの設定についての部分を拡張できますか?私たちはデモのために実際の電話を使うつもりですが、たとえそれがプロキシであっても$ httpを使うことができるのは素晴らしいでしょう –
この例をチェックしてください:https://github.com/ionic-team/ionic-proxy-example –