2017-08-24 5 views
0

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)更新のPhoneGap​​3210をする危険な状態で何もアクセスが

<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がブラウザで動作しているが、電話で失敗していることを参照する多くの質問があります。

+0

この問題は、アプリの開発モードでのみ直面していますか?あなたは簡単にプロキシを設定でき、それが問題を解決することを覚えておいてください。 –

+0

プロキシの設定についての部分を拡張できますか?私たちはデモのために実際の電話を使うつもりですが、たとえそれがプロキシであっても$ httpを使うことができるのは素晴らしいでしょう –

+0

この例をチェックしてください:https://github.com/ionic-team/ionic-proxy-example –

答えて

0

問題は$ httpではなく、POST中にパス$ httpが指定されていることが分かります。 baseURI変数は//api.site.comに設定されていましたが、ブラウザで正常に動作しましたが、モバイルアプリでは正常に動作しませんでした。より明示的に変更するとhttps://api.site.comがうまくいった。

関連する問題